Abi*_*idi 7 java multithreading
我理解一个synchronized块或方法将阻塞所有线程,直到内部的一个"左".我想知道,当线程在同步块内执行时,是否可以发生上下文切换?在我的理解中,它不应该.
谢谢!
das*_*ght 11
可以在同步块内执行线程时发生上下文切换吗?
是的,上下文切换也可以在synchronized
块内发生.唯一不同的是,没有其他线程可以进入同一个synchronized
块(或synchronized
同一个对象上的任何其他块),直到上下文切换回该预占线程,让它完成其受保护的代码.
你所理解的都是错误的。同步块不会阻塞其他线程。同步块仅阻止其他线程进入在同一对象上同步的块。当同步块正在执行时,其他线程继续运行。
当然,上下文切换可以在同步块中发生,因为其他线程也必须有一些时间来执行自己。如果不是这种情况,运行几秒钟的两个同步块将阻塞 2 核计算机上的所有其他内容。你真的不希望这种事发生。