本片文章尝试从另一个层面来了解我们常见的同步(synchronized)和锁(lock)机制。如果读者想深入了解并发方面的知识推荐一本书《java并发编程实战》,非常经典的一本书,英语水平好的同学也可以读一读《Concurrent programming in Java - design principles and patterns》由Doug Lea亲自操刀,Doug Lea是并发方面的大神,...
分类:
编程语言 时间:
2015-03-12 22:41:57
阅读次数:
1093
一、初识Concurrent第一次看见concurrent的使用是在同事写的一个抽取系统代码里,当时这部分代码没有完成,有许多的问题,另一个同事接手了这部分代码的功能开发,由于他没有多线程开发的经验,所以我就一起帮着分析。最开始看到这个时很烦燥啊,因为自己接触java时间很短,连synchroniz...
分类:
编程语言 时间:
2015-03-12 18:48:57
阅读次数:
198
synchronized关键字是java并发编程中为了解决线程对共享资源的竞争造成错误,而提供的解决方案。synchronized关键字有两种用法,一种是只用于方法的定义中,另外一种是synchronized块,我们不仅可以使用synchronized来同步一个对象变量,你也可以通synchronized来同步类中的静态方法和非静态方法。那么问题来了,同步静态方法与动态方法有什么区别呢?看完下面这...
分类:
编程语言 时间:
2015-03-12 09:53:28
阅读次数:
3994
上一篇文章提到AQS是基于CLH lock queue,那么什么是CLH lock queue,说复杂很复杂说简单也简单, 所谓大道至简:CLH lock queue其实就是一个FIFO的队列,队列中的每个结点(线程)只要等待其前继释放锁就可以了。AbstractQueuedSynchronizer...
分类:
编程语言 时间:
2015-03-11 22:51:46
阅读次数:
191
AQS其实就是java.util.concurrent.locks.AbstractQueuedSynchronizer这个类。 阅读Java的并发包源码你会发现这个类是整个java.util.concurrent的核心之一,也可以说是阅读整个并发包源码的一个突破口。比如读ReentrantLock...
分类:
编程语言 时间:
2015-03-10 21:21:01
阅读次数:
295
Java 并发JavathreadSocketC#C++并发Table of Contents1 什么是并发问题。 2多线程死锁问题2 java中synchronized的用法 3 Java中的锁与排队上厕所。 4 何时释放锁? 5 Lock的使用 6 利用管道进行线程间通信 7 阻塞队列 8 使用...
分类:
编程语言 时间:
2015-03-10 11:56:05
阅读次数:
174
方案一:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java....
分类:
编程语言 时间:
2015-03-10 09:01:49
阅读次数:
168
在java中,最常用的数据结构可能是列表。有数目不详的元素列表,你可以添加、阅读、或删除任何位置的元素。此外,并发列表允许不同的线程列表中添加或删除元素时不产生任何数据不一致。非阻塞列表提供如下操作,如果操作不能立即完成,列出抛出异常或者返回一个null值。Java 7中引入了ConcurrentLinkedDeque类,它实现了一个非阻塞并发列表,在本教程中,我们将学习使用这个类。
...
分类:
编程语言 时间:
2015-03-09 09:25:23
阅读次数:
284
异常捕获以前使用executor的时候,为了记录任务线程的异常退出会使用ThreadFactory来设置线程的UncaughtExceptionHandler,但是按照书上的验证发现,采用executorService.submit执行任务时,线程抛出的异常并不会被该处理器捕获,而当使用execut...
分类:
编程语言 时间:
2015-03-07 22:30:36
阅读次数:
145
一直以为执行了interrupt方法就可以让线程结束,并抛出InterruptedException. 今天看了Java并发编程实战的第七章发现并不是这么回事,在这章的开头就提到要使任务和线程能安全、快速、可靠地停止下来,并不是一件容易的事。Java没有提供任何机制来安全地终止线程。但它提供了(In...
分类:
编程语言 时间:
2015-03-07 15:25:15
阅读次数:
194