[英]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.