我正在创建多个线程并yield()
在其中调用。
java.lang.Thread.yield() 方法使当前正在执行的线程对象暂时暂停并允许其他线程执行。
是否有可能执行其他线程也想进入同步块?
synchronized(this.lock)
{
//calling yield here.
}
谢谢。
我正在创建多个线程并yield()
在其中调用。
java.lang.Thread.yield() 方法使当前正在执行的线程对象暂时暂停并允许其他线程执行。
是否有可能执行其他线程也想进入同步块?
synchronized(this.lock)
{
//calling yield here.
}
谢谢。
据我所知, Yield() 只放弃了 CPU 上的剩余时间片并退回到队列中。它不会释放任何同步对象。
yield
不获取或释放锁,它只是暂停当前线程执行。所以在synchronized
block中yield不会让当前线程释放锁而让其他方法进入synchronized
block。wait/notify
应该使用方法来释放锁。
Thread.sleep 使当前正在执行的线程在指定的持续时间内休眠(暂时停止执行),具体取决于系统计时器和调度程序的精度和准确性。线程不会失去任何监视器的所有权,并且恢复执行将取决于调度和执行线程的处理器的可用性。
重要的是要注意 Thread.sleep 和 Thread.yield 都没有任何同步语义。特别是,编译器不必在调用 Thread.sleep 或 Thread.yield 之前将缓存在寄存器中的写入刷新到共享内存,编译器也不必在调用 Thread.sleep 或 Thread 之后重新加载缓存在寄存器中的值。屈服。
yield
允许上下文切换到其他线程,因此该线程不会消耗进程的整个 CPU 使用率。线程仍然持有锁。处理死锁是开发人员的责任。