生产者/消费者问题_2 | 指尖的舞客



生产者/消费者问题_2 | 指尖的舞客

生产者/消费者问题_1中,我们使用wait()/notify()方法实现了这个多线程通信模型,其中借助了synchronized关键字实现。本篇主要阐述使用可重入锁(ReentrantLock)来实现生产者和消费者之间的同步。ReentrantLock实现了Lock接口,是JDK5.0新增的java类,并没有作为一种语言特性来实现,可能是考虑到扩展性问题。

ReentrantLock与synchronized关键字的关系比较微妙,都是用于线程间的同步问题。区别在于:当线程间争用频繁发生时,ReentrantLock的同步开销比synchronized要低得多;ReentrantLock是新增的接口,在低于5.0版本的jkd中不兼容;ReetrantLock是新增类,且使用常因为在忘记unlock而出错,相反编码人员对synchronized关键字比较熟悉,不易出错。事实上,在较新的jvm实现中对同步(synchronized)的优化比较理想,只要线程间的争用不是特别频繁,那么同步(synchroized)的开销是比较小的,所以在使用ReentrantLock和synchronized关键字时,分析下使用需求,就能很快做出选择了。(对于两者的理解和比较,请参考:http://blog.csdn.net/fw0124/article/details/6672522)


Read full article from 生产者/消费者问题_2 | 指尖的舞客


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts