摘要:第一个线程,从开始如果另一个线程等待,则唤醒对方之后,自己等待如果另一个线程等待,则唤醒对方之后,自己等待使用条件锁最重要的是,自己等待之前,一定要唤醒其他线程,并且记住要释放锁。
public class testThread { public static void main(String[] args) { ReentrantLock lock=new ReentrantLock(); Condition one =lock.newCondition(); Condition two=lock.newCondition(); //第一个线程,从1开始 new Thread(new Runnable() { @Override public void run() { int i = 1; while (i<=20){ lock.lock(); System.out.print(" thread--1----:"+i); try { //如果另一个线程等待,则唤醒对方之后,自己等待 two.signalAll(); one.await(); i=i+2; } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } } }).start(); new Thread(new Runnable() { @Override public void run() { int i = 2; while (i<=20){ lock.lock(); System.out.print(" thread--2----:"+i); try { //如果另一个线程等待,则唤醒对方之后,自己等待 one.signalAll(); two.await(); i=i+2; } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } } }).start(); } }
使用条件锁最重要的是,自己等待之前,一定要唤醒其他线程,并且记住finally要释放锁。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/70952.html
摘要:通知任一一个进入等待状态的线程,通知所有让调用线程阻塞在这个方法上,直到的线程完全执行完毕,调用线程才会继续执行。通知调度器,主动让出对的占用。 多线程在开发知识中是一个很重要的部分,然而实际生产中却很少遇到真正需要自己去处理多线程编程里的那些复杂细节和问题,因为很多时候,都有一套架构或者一些框架帮大部分业务程序员隐藏了多线程的细节,大多时候只需要简单的实现各种业务逻辑即可。 今天来理...
摘要:大多数都是线程安全的,所以极大降低了在实现线程安全性的复杂性。只有在处理请求需要保存一些信息的情况下,线程安全性才会成为一个问题。虽然这种方式可以保证线程安全,但是性能方面会有些问题。 本文是作者在阅读JCIP过程中的部分笔记和思考,纯手敲,如有误处,请指正,非常感谢~ 可能会有人对书中代码示例中的注解有疑问,这里说一下,JCIP中示例代码的注解都是自定义的,并非官方JDK的注解,因此...
阅读 747·2021-09-26 09:55
阅读 2003·2021-09-22 15:44
阅读 1446·2019-08-30 15:54
阅读 1306·2019-08-30 15:54
阅读 2630·2019-08-29 16:57
阅读 485·2019-08-29 16:26
阅读 2465·2019-08-29 15:38
阅读 2106·2019-08-26 11:48