多线程锁的执行顺序问题

J2EE 码拜 9年前 (2015-04-14) 1199次浏览 0个评论
 

多线程中给一对象加了锁
我想让线程总是安装先来后到的顺序来取得对象 不知道怎么实现?

例如线程1、2、3  依次来访问资源A
1先来所以锁住了A
此后2、3依次到来等待释放资源
等1释放资源后,想要实现安照先来后到的顺序执行,即2先于3取得资源。

多线程锁的执行顺序问题
多线程同步
http://www.cnblogs.com/hoojo/archive/2011/05/05/2038101.html
多线程锁的执行顺序问题
     按照正常的逻辑,是没有办法去对线程的执行顺序进行控制的,因为线程的执行完全是自发地去抢CPU时间片,谁抢到谁先执行。
     除非你在程序内部控制,设计一个执行顺序记录的全局变量A。如果1执行完,变量A赋值为1,如果是2接着抢到了时间片,则可以直接正常执行,将变量A设置为2;如果是3抢到了CPU时间片,则直接退出线程,不允许3在变量A为1的时候执行。
多线程锁的执行顺序问题
线程之间是没有顺序的
多线程锁的执行顺序问题
40分
1 用ReentrantLock公平模式就可以
2 又或者,自己构造调用顺序,前一个完了发现有等待的通知下一个
2方法的优势是可以在线程开始前定义好执行顺序
1方法则不行,隐患就是,线程开始后,你很难在同步点之前控制自己想要的顺序,不过满足你说的要求
多线程锁的执行顺序问题
引用 4 楼 zapdos 的回复:

1 用ReentrantLock公平模式就可以
2 又或者,自己构造调用顺序,前一个完了发现有等待的通知下一个
2方法的优势是可以在线程开始前定义好执行顺序
1方法则不行,隐患就是,线程开始后,你很难在同步点之前控制自己想要的顺序,不过满足你说的要求

谢谢

多线程锁的执行顺序问题
最简单的方法启动 1,设置所有其他优先级为最低,线程 2 优先级最高
单 nofity 2
自己记录顺序

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明多线程锁的执行顺序问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!