Java 同步块内的产量?调用yield()后的锁释放?

Java 同步块内的产量?调用yield()后的锁释放?,java,multithreading,synchronization,Java,Multithreading,Synchronization,我正在创建一个多线程并在其中调用yield() java.lang.Thread.yield()方法使当前正在执行的Thread对象暂时暂停,并允许其他线程执行 是否有可能让其他线程执行也要进入同步块的线程 synchronized(this.lock) { //calling yield here. } 谢谢。据我所知,Yield()只会放弃CPU上剩余的时间片,并返回队列。它不释放任何同步对象。yield不接受或释放锁,它只是暂停当前线程的执行。因此,在synchronized块中让步

我正在创建一个多线程并在其中调用
yield()

java.lang.Thread.yield()方法使当前正在执行的Thread对象暂时暂停,并允许其他线程执行

是否有可能让其他线程执行也要进入同步块的线程

synchronized(this.lock)
{
 //calling yield here.

}

谢谢。

据我所知,Yield()只会放弃CPU上剩余的时间片,并返回队列。它不释放任何同步对象。

yield
不接受或释放锁,它只是暂停当前线程的执行。因此,在
synchronized
块中让步不会让当前线程释放锁,也不会让其他方法进入
synchronized
块<代码>等待/通知方法应用于释放锁

sleep导致当前正在执行的线程休眠 (暂时停止执行)在规定期限内,根据 系统计时器和调度程序的精度和准确性。线 不会失去任何监控器的所有权,也不会恢复执行 将取决于调度和所依赖的处理器的可用性 执行线程

需要注意的是,Thread.sleep和Thread.yield都没有任何同步语义。尤其是编译器 不必将缓存在寄存器中的写入刷新到共享内存 在调用Thread.sleep或Thread.yield之前,编译器也不会 调用Thread.sleep后必须重新加载缓存在寄存器中的值 或线程。屈服


yield
允许上下文切换到其他线程,因此此线程不会占用整个进程的CPU使用量。线仍然保持着锁。开发人员有责任处理死锁

不要缩进文本块,因为站点格式化程序会将其视为代码并使其不可读。我试图解决这个问题,但你“取消”了。我会再修一次,但请不要把它改回来。简言之,这是一个非常糟糕的主意。使用
this.lock.wait(1)取而代之。