关于ReentrantLock和Condition的用法
2017-02-28 11:59
405 查看
这篇博客是过年后的第一篇博客,2.13正式上班,之前在家休年假。上班第一天公司说有个紧急的项目需要上线,所以我们连续加了两个星期的班,直到上个周六还在加班,终于成功上线了。今天是2月的最后的一天,继续多线程的博客系列,是关于ReentrantLock和Condition的用法。废话不多说,先上代码。
这代码其实跟上一遍的notify和wait的效果是一样的,都是两个线程之间的通信,那些汉字其实就是每个线程要执行的具体业务逻辑。只是notify和wait在synchronized块执行的,好了这里要涉及到synchronized与ReentrantLock的区别?区别是啥呢?肯定有不一样的地方,不然Java设计者为啥要设计两个关键字都表示线程同步呢。http://javarevisited.blogspot.com/2013/03/reentrantlock-example-in-java-synchronized-difference-vs-lock.html 这个有着详细的介绍。
public class Worker7 { private int count = 0; private Lock lock = new ReentrantLock(); private Condition condition = lock.newCondition(); private void incrment() { for (int i = 0; i < 10000; i++) { count++; } } public void firstThread() throws InterruptedException { lock.lock(); System.out.println("有人在试衣间吗?哥哥要试试这东亚风格的大裤衩 "); condition.await(); System.out.println("好的,我进来了"); try { incrment(); } finally { lock.unlock(); } } public void secondThread() throws InterruptedException { Thread.sleep(3000); lock.lock(); System.out.println("姐在,你要等会儿,我正在穿衣服,不许偷看啊"); new Scanner(System.in).nextLine(); System.out.println("姐要马上出来了"); condition.signal(); try { incrment(); } finally { lock.unlock(); } } public void finished(){ System.out.println("count is: " +count); } }
这代码其实跟上一遍的notify和wait的效果是一样的,都是两个线程之间的通信,那些汉字其实就是每个线程要执行的具体业务逻辑。只是notify和wait在synchronized块执行的,好了这里要涉及到synchronized与ReentrantLock的区别?区别是啥呢?肯定有不一样的地方,不然Java设计者为啥要设计两个关键字都表示线程同步呢。http://javarevisited.blogspot.com/2013/03/reentrantlock-example-in-java-synchronized-difference-vs-lock.html 这个有着详细的介绍。
相关文章推荐
- Java多线程(五) ReentrantLock、Lock和Condition的用法
- ReentrantLock Condition 用法
- Java多线程11:ReentrantLock的使用和Condition
- Java中的锁ReentrantLock,condition 与synchronized,volatile
- 线程锁ReentrantLock和Condition的使用
- Java多线程(九)之ReentrantLock与Condition (2013-02-19 16:43:54)
- Java多线程(九)之ReentrantLock与Condition
- 对“关于boost::condition的用法”文章的个人的分析
- Java多线程之concurrent包(一)——ReentrantLock与Condition
- 关于lock(this)的说明及用法
- ReentrantLock与Condition
- Thread详解13:ReentrantLock的用法(一)
- 关于c#里的lock关键字的用法
- 关于concurrent的子包locks下reentrantReadwritelock的一点疑惑
- 关于concurrent的子包locks下reentrantReadwritelock的一点疑惑(第二篇)
- ReentrantLock的使用和Condition
- Java多线程(九)之ReentrantLock与Condition
- 对“关于boost::condition的用法”文章的个人的分析
- 重入锁(ReentrantLock)、重入读写锁(ReentrantReadWriteLock)、线程通信(Condition)
- java并发控制:ReentrantLock Condition使用详解