繁体   English   中英

线程死锁和同步

[英]Thread deadlocking and synchronization

我知道我需要适当地使用同步以避免在使用多个线程时出现死锁,但是我想知道:

修改值检查变量时都需要同步,还是在修改值时才需要同步,而在检查变量时就不需要同步?

至于死锁:Darkhogg已经正确指出死锁是由于不正确的同步和工作流导致的。

同步状态修改和状态观察:是的,您需要同时同步两者。 输入同步方法时获得的对象锁的作用是,没有其他线程可以输入相同或另一个需要相同对象锁的同步代码块(在同一对象上同步)。 就是说,如果不同步观察对象状态的代码,则该代码可能与修改状态的同步代码并发执行,并且您可能会读取无效的对象状态。

阅读该文章后,我将为您提供有关同步的更好的知识库http://javarevisited.blogspot.com/2011/04/synchronization-in-java-synchronized.html

如果您拥有的资源不是线程安全的,则需要保护检查和修改其值。

正如Darkhogg提到的,如果使用不正确,同步会导致死锁。

您需要同步正在更新(更改数据成员)值并且可以由多个线程执行的数据成员上的代码块。

使其同步将确保不会同时更新数据成员。

同步时不要使用以避免死锁

Synchronize关键字可确保在多线程环境中安全地运行线程。 尽管您有多线程,但您想要修改和检查成员变量。

为此,创建一个类,其中包含要线程安全处理的数据变量。 创建用于附加和检查变量的同步函数。

class exam
{
 ....

 synchronized void examine()
 {}


 synchronized void amending()
 {}


}

创建该类的单个对象,并将其传递给您的所有线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM