什么会或不会导致线程阻塞(测试中的问题)

时间:2010-03-20 13:05:54

标签: java multithreading

我有一个测试,有一个问题我失去了一些观点,因为我无法回答:

以下哪项不是导致线程阻止的条件:

  • 调用对象的wait()方法
  • 等待I / O操作
  • 调用sleep()
  • 调用yield()
  • 调用join()

据我所知,所有这些都是阻止呼叫:

  • wait()返回什么时候调用notify(),阻塞直到那时
  • 如果线程正在等待I / O操作,那么它显然被阻止
  • 显然,
  • sleep()阻塞,直到时间用完,或某些东西唤醒线程
  • yield()“取消线程的其余时间片”(缺少一个更好的术语),并且仅在线程再次激活时返回
  • join()阻塞,直到它等待的线程终止。

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:4)

产率()。它不会阻塞线程,我的意思是它不会将线程置于BLOCK状态,但它将线程置于READY状态 - 因此调度程序可以再次选择它来执行。尝试关于线程状态的事情。所有操作但yield都将线程置于BLOCK状态。

答案 1 :(得分:1)

此外,在已完成的线程上调用join()将不会阻止。如果没有其他线程可以执行,sleep(0)将表现得像yield()