摘要: 多线程除了同步问题外,还需要线程之间的协作。比如说最经典的生产者 消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生 阅读全文
posted @ 2016-10-04 10:37 Hesier 阅读(756) 评论(0) 推荐(0) 编辑
摘要: 创建线程有2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提供了Callable 阅读全文
posted @ 2016-10-04 10:35 Hesier 阅读(421) 评论(0) 推荐(0) 编辑
摘要: ThreadPoolExecutor ThreadPoolExecutor继承了AbstractExecutorService类,并提供了四个构造器,事实上,通过观察每个构造器的源码具体实现,发现前面三个构造器都是调用的第四个构造器进行的初始化工作。 各个参数含义: corePoolSize:核心池 阅读全文
posted @ 2016-10-04 10:33 Hesier 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 对于多线程编程,java中有同步容器(HashTable,Vector),并发容器(ConcurrentHashMap、CopyOnWriteArrayList),还有阻塞队列。 非阻塞队列,比如PriorityQueue、LinkedList,一个很大问题就是:它不会对当前线程产生阻塞,那么在面对 阅读全文
posted @ 2016-10-04 09:06 Hesier 阅读(221) 评论(0) 推荐(0) 编辑