
并发编程
文章平均质量分 78
wjy320
这个作者很懒,什么都没留下…
展开
-
Java并发编程的执行器Executor
Java SE5中java.util.concurrent包中的执行器将管理Thread.简要介绍一下:1.CachedThreadPool:这是首选的,因为他会根据需要创建合理数量的线程:ExecutorService exec=Executors.newCachedThreadPool(); for(int i=0;i<10;i++){ exec.e...原创 2014-01-13 10:06:16 · 122 阅读 · 0 评论 -
基于DCL的单例模式的分析
最近在看三石-道的关于并发的一些博客,在一篇博客中看到了基于DCL实现的单例模式: http://www.molotang.com/articles/407.html 于是在并发编程网上又看了两篇博客,以加深对单例模式的理解。 http://ifeve.com/doublecheckedlocking/ ...原创 2014-04-23 10:16:52 · 207 阅读 · 0 评论 -
基于NIO的服务器陷入写状态有效死循环的原因分析
有一段时间没写博客了,最近在给导师做并行通信的一个程序。在编码过程中发现了一个问题,查阅了很多资料,今天终于知道了原因。 问题描述: 编写基于NIO服务器的时候,客户端向服务端发送一条消息之后,服务端的Selector.select()陷入写有效的死循环中。 在分析问题之前先推荐一些博客和...原创 2014-04-22 15:51:36 · 665 阅读 · 0 评论 -
探究Java的.class文件和类加载器
最近在拜读林昊先生写的《分布式Java应用基础与实践》,有一种相见恨晚的感觉。决定把自己看书的收获写出来。以前没有深度考虑.class文件里面到底是什么,今天我们就来一窥.class文件。 首先写个超级简单的类:public class User{ private int age;} 我将它保存之后放在E盘的根目录下。 我...原创 2014-04-17 10:34:47 · 134 阅读 · 0 评论 -
LinkedBlockingQueue的put,add和offer的区别
最近在学习<<Java并发编程实践>>,有很多java.util.concurrent包下的新类。LinkedBlockingQueue就是其中之一,顾名思义这是一个阻塞的线程安全的队列,底层应该采用链表实现。 看其API的时候发现,添加元素的方法竟然有三个:add,put,offer。且这三个元素都是向队列尾部添加元素的意思。于是我产...原创 2014-06-27 10:00:13 · 1678 阅读 · 0 评论 -
好的关于并发编程的博客整理
最近在看关于并发编程方面的博客,找到一些感觉不错的博客。记录下来: KMP算法的简单实现:http://yanxuxin.iteye.com/blog/540562 Synchronized;http://yanxuxin.iteye.com/blog/547261http://yanxuxin.iteye.com/blog/551734 Thread:h...原创 2014-06-26 14:36:27 · 340 阅读 · 0 评论 -
ReentrantReadWriteLock小结
最近在看<<Java并发编程实践>>,有这样一个类:ReentrantReadWriteLock。在这里做一个小结: 线程获得写锁的前提条件: 其他线程没有获得读锁:注意一定是其他线程!!!!!!!!!!!!!!!public class ReadWriteLock{ static ReentrantReadWrit...原创 2014-06-26 10:17:02 · 320 阅读 · 0 评论 -
CountDownLatch用法小结
最近在看ZK的源码,看到了有用到java.util.concurrent.CountDownLatch 这个类。总结一下用法: CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。主要方法 public CountDownLatch(int count); public void c...原创 2014-06-18 11:38:03 · 129 阅读 · 0 评论 -
线程本地存储
先简要对ThreadLocal进行一下说明,大家都知道synchronized,他是为了解决线程互斥访问临界资源的。而ThreadLocal是为了隔离临界资源(可能这里不应该叫临界资源了,应该叫被共享的资源),创建副本解决synchronized要解决的那个问题的。 看个例子先:package com.wjy.threadlocal;public c...原创 2014-01-14 16:09:20 · 111 阅读 · 0 评论 -
在其他对象上同步
synchronized块必须给定一个在其上进行同步的对象,最合理的方式是:使用其方法正在被调用的当前方法:synchronized(this)。 但是有的时候必须在另一个对象上同步。 我们看两个代码的例子: ...原创 2014-01-14 14:56:43 · 103 阅读 · 0 评论 -
共享资源
共享资源一般是以对象形式存在的内存片段,但也可以是文件,输入/输出端口,或者是打印机。要控制对共享资源的访问,得先把它包装进一个对象。然后把所有要访问这个资源的方法标记为synchronized。如果某个任务处于一个队标记问synchronized的方法的调用中,那么在这个线程从该方法返回之前,其他所有要调用类中任何标记为synchronized方法的线程都会被阻塞。 对于某...原创 2014-01-14 09:25:50 · 173 阅读 · 0 评论 -
看一个守护线程的使用例子
package com.wjy.test;import java.io.IOException;public class ResponsiveUI extends Thread{ private static volatile double d=1; public ResponsiveUI(){ setDaemon(true); start(); }...原创 2014-01-13 15:14:33 · 162 阅读 · 0 评论 -
线程从任务中产生返回值
1,实现Callabale<V>接口而不是Runnable接口。2, 在call方法中返回需要的信息。3.使用ExecutorService.submit调用,返回值是Future<V>。4.通过get获得结果,也可以使用isDone进行检测;否则get可能阻塞直到有结果准备就绪。看个例子:package com.wjy.multithread;...原创 2014-01-13 10:48:36 · 116 阅读 · 0 评论 -
NIO中ByteBuffer的一些注意事项
缓冲区即可以用来输入也可以用来输出,这一点和流不同,流只能向一个方向传递数据。 ByteBuffer是Java的NIO中普遍使用的用于接收和发送消息的缓冲区。在读写数据时,它具有内部状态来跟踪缓冲区的当前位置。 1.缓冲区的内部状态: capacity: 缓冲区的元素总数(不可修改)。 ...原创 2014-04-24 09:34:46 · 558 阅读 · 0 评论