Java如何实现多线程顺序执行


这篇文章主要介绍Java如何实现多线程顺序执行,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!编写一个程序,启动三个线程,三个线程的name分别是A,B,C;,每个线程将自己的ID值在屏幕上打印5遍,打印顺序是ABCABC…这里的判断条件中用的是 while 而不是 if , 这两者之间有什么区别呢? 线程从 wait 状态被唤醒,并且获得锁以后会继续往下执行,比如 A 调用nofityAll() 唤醒 B,C,这时 B与C谁会先获得锁是不确定的。如果是C先获得了锁,那么C就继续往下执行打印,这与我们的期望的不符。所以这里我们使用了一个 while,当C获得锁以后再去判断一下flag,如果这时还不是它执行的时候,它就再次进入wait状态。此时A与C都是wait状态,获得锁的一定是B,从而实现我们期望的顺序打印。当使用LOCK时可以不使用while因为condition可以唤醒指定的线程。同时注意必须先调用 conditionA.signal(); 再调用 lock.unlock(); ,否则会抛 java.lang.IllegalMonitorStateException 异常。因为在调用unlock之后,当前线程已不是此监视器对象condition的持有者。也就是说要在此线程持有锁定对象时,才能使用此锁定对象。api中的解释
抛出的异常表明某一线程已免费云主机域名经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。从以下版本开始:
JDK1.0
另请参见:
Object.notify(), Object.notifyAll(), Object.wait(), Object.wait(long), Object.wait(long, int), 序列化表格
也就是当前的线程不是此对象监视器的所有者。也就是要在当前线程锁定对象,才能用锁定的对象此行这些方法,需要用到synchronized ,锁定什么对象就用什么对象来执行
notify(), notifyAll(),wait(), wait(long), wait(long, int)操作,否则就会报IllegalMonitorStateException异常。
例如 :
exapmle 1,锁定方法所属的实例对象:
exapmle 2,锁定方法所属的实例的Class:
exapmle 3,锁定其他对象:
以上是“Java如何实现多线程顺序执行”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注百云主机行业资讯频道!

相关推荐: react项目中如何解决跨域问题

这篇文章主要介绍“react项目中如何解决跨域问题”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“react项目中如何解决跨域问题”文章能帮助大家解决问题。一.为什么会出现跨域?因为我们的浏览器遵循同源政策(scheme…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 09/08 17:17
Next 09/08 17:21

相关推荐