[英]java thread blocking
从同步方法调用的非同步方法可以允许线程阻塞吗?
public synchronized void foo(){
someStuff();
someMoreStuff();
bar();
}
public void bar(){
//... does some things
}
如果线程正在执行foo(),是否有任何方法可以确保在线程休眠之前调用bar()?
TIA
线程总是可以被抢占(在Java中无法阻止),但是在foo
返回之前,没有其他线程能够获取对同一对象的锁定。
请注意,线程“丢失CPU”通常不是“阻塞”的意思-通常,如果调用需要等待其他事件发生,则将其视为阻塞。 例如:
这些与仅用完时间片有很大不同。
您是否在问是否有办法确保Java VM不占用CPU并让另一个线程执行? 您可以将Thread优先级设置为高,但这仍然不能提供任何保证。
但是,在没有CPU的情况下,没有其他线程可以调用“ foo”方法。 同样,同步“ bar”将阻止调用它,直到您对“ foo”的调用完成为止(因为您在“ foo”方法的整个过程中都拥有锁)。
问题似乎是,其他线程是否可以在执行foo()的过程中自由地调用bar()而一个线程将对象的锁锁定。 特别是,如果两个或多个线程可以同时运行bar()。
答案是任何线程都可以在任何时间运行bar(),因此,是的,在任何时间点都可以有多个线程在运行bar()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.