繁体   English   中英

Java线程阻塞

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM