线程调度和同步

时间:2019-01-08 20:38:14

标签: java multithreading operating-system synchronization thread-synchronization

线程调度程序是否可能将持有锁的线程取消调度到 synchronized 块,并且正在执行该线程?如果是,那么非调度导致线程释放锁吗?假设线程没有调用诸如wait/yield等的方法。

我一直在尝试了解同步块如何在 read-update-write 操作中提供帮助?如果进入同步块的线程不能被调度,那么它更容易理解,但是如果可以,那么可见性问题就来了,因为变量可能已经被更新但没有被线程和主线程写入主存储器。线程调度程序取消调度它,其他线程获得锁并更新主内存中的变量。 是否有任何信息。在JLS中是否也一样?

1 个答案:

答案 0 :(得分:3)

  

线程调度程序是否可以对持有[锁]的线程取消调度?

是的,这可以在许多scheduling algorithms中抢先发生。如果线程进行了阻塞的系统调用(例如,等待输入),则必须发生。

  

如果是,那么非调度导致线程释放锁吗?

绝对不是!那会破坏锁定的目的,并且会破坏大多数多线程程序。


注意事项:关键部分要尽可能短!当线程A被阻塞执行长时间计算(或更糟糕的是,等待输入)时,不要让线程B,C,D和E都被阻塞,等待线程A释放一些锁。