java线程阻塞

标签 java multithreading

从同步方法调用的非同步方法是否允许线程阻塞?

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/

相关文章:

java - 防止JPopupMenu被任务栏覆盖

java - 在包含 NULL 的 ArrayList 上使用 map {} 时出现 NPE

java - 将 int 转换为十六进制字符串时出现异常

c - C 基本打印中的 Pthread

java - MySQL 选择更新和插入

ruby-on-rails - guard/listen gem 在控制台上工作

java - 多线程中Notify方法的使用

c# - .NET Web 应用程序 native 使用多少个线程?

java - SpreadsheetAddRows 在中等大小的查询上失败

java - 查找与 DLL 中的偏移量匹配的 Delphi 源代码行