我知道我需要正确使用同步 以避免在使用多个线程时出现死锁,但我想知道:
我是否需要同步修改和检查变量的值,或者我只需要在修改时进行同步值,但不是在我检查变量时?
答案 0 :(得分:2)
至于僵局:Darkhogg已经正确地指出死锁是由于错误的同步和工作流程造成的。
同步状态修改和状态观察:是的,您需要同步两者。您在输入synchronized方法时获得的对象锁定的效果是,没有其他线程进入相同或另一个需要相同对象锁定的同步代码块(在同一对象上同步)。也就是说,如果您不同步观察对象状态的代码,那么此代码可能会同时执行到修改状态的同步代码,您可能会读取无效的对象状态。
答案 1 :(得分:1)
阅读那篇文章,我将为您提供更好的同步知识库 http://javarevisited.blogspot.com/2011/04/synchronization-in-java-synchronized.html
答案 2 :(得分:1)
如果您的资源不是线程安全的,则需要保护检查和修改其值。
答案 3 :(得分:1)
正如Darkhogg所说,如果使用不当,同步会导致死锁。
您需要在正在更新(更改数据成员)值的数据成员上同步代码块,并且可以由多个线程执行。
使其同步将确保不会同时更新数据成员。
答案 4 :(得分:0)
同步不使用以避免死锁
在多线程环境中同步关键字确保线程安全。虽然你有一个多线程,但你想修改和检查成员变量。
要创建一个包含要对其进行线程安全的数据变量的类。创建用于追加和检查变量的同步函数。
class exam
{
....
synchronized void examine()
{}
synchronized void amending()
{}
}
创建该类的单个对象并将其传递给您的所有线程。