线程死锁和同步

时间:2014-01-26 11:13:13

标签: java android multithreading thread-safety

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

我是否需要同步修改检查变量的值,或者我只需要在修改时进行同步值,但不是在我检查变量时?

5 个答案:

答案 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()
 {}


}

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