从同步方法调用的非同步方法是否允许线程阻塞?
public synchronized void foo(){
someStuff();
someMoreStuff();
bar();
}
public void bar(){
//... does some things
}
如果一个线程正在执行 foo(),是否可以确保在线程 hibernate 之前调用 bar()?
TIA
最佳答案
一个线程总是可以被抢占(在 Java 中没有办法阻止这种情况)但是在 foo
返回之前没有其他线程能够获取同一对象上的锁。
请注意,“失去 CPU”的线程通常不是“阻塞”的意思 - 通常,如果调用需要等待其他事情发生,则调用被视为阻塞。例如:
- 从流中读取 block ,直到有一些数据可用(或到达流的末尾)
- 获取锁 block ,直到锁可用
这些与刚用完时间片非常不同。
关于java线程阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1279394/