当前位置 : 主页 > 编程语言 > java >

第14章 多线程(4) Lock 条件对象与 synchronized 方法

来源:互联网 收集:自由互联 发布时间:2022-07-13
14.5.4 条件对象 锁应该加在哪里? 答:if/switch/三目/循环 条件判定中,使用了线程共享的变量前后,需要加锁。 非线程共用变量,不同线程,同时处理是安全的(比如局部变量)。他们


第14章 多线程(4) Lock 条件对象与 synchronized 方法_加锁

第14章 多线程(4) Lock 条件对象与 synchronized 方法_idea_02

 14.5.4 条件对象

锁应该加在哪里?

答:if/switch/三目/循环 条件判定中,使用了线程共享的变量前后,需要加锁。

非线程共用变量,不同线程,同时处理是安全的(比如局部变量)。他们的值不会因为线程切换受到影响。

线程共用变量,非条件判定语句处理如果是原子操作(原子加法),或者不改变值是安全的(比如打印)

条件判定结果受到共享变量的影响,可能在判定后切换线程,然后再次切回当前线程后不满足条件继续执行后续语句,导致条件失效。

因为线程共享的变量(条件对象)受到不同线程切换的影响,所以,锁可以针对不同对象进行“上锁”操作。

获取条件:Condition condition = lock.newCondition();

不满足条件时进行等待,直到唤醒:condition. await()

可能满足其他条件,随机结束阻塞:condition. signal(),全部解除阻塞:condition. signalAll()

网友评论