14.5.4 条件对象 锁应该加在哪里? 答:if/switch/三目/循环 条件判定中,使用了线程共享的变量前后,需要加锁。 非线程共用变量,不同线程,同时处理是安全的(比如局部变量)。他们
14.5.4 条件对象
锁应该加在哪里?
答:if/switch/三目/循环 条件判定中,使用了线程共享的变量前后,需要加锁。
非线程共用变量,不同线程,同时处理是安全的(比如局部变量)。他们的值不会因为线程切换受到影响。
线程共用变量,非条件判定语句处理如果是原子操作(原子加法),或者不改变值是安全的(比如打印)
条件判定结果受到共享变量的影响,可能在判定后切换线程,然后再次切回当前线程后不满足条件继续执行后续语句,导致条件失效。
因为线程共享的变量(条件对象)受到不同线程切换的影响,所以,锁可以针对不同对象进行“上锁”操作。
获取条件:Condition condition = lock.newCondition();
不满足条件时进行等待,直到唤醒:condition. await()
可能满足其他条件,随机结束阻塞:condition. signal(),全部解除阻塞:condition. signalAll()
❤