2011-02-02 122 views
-1

当我读Java线程的概念,我有看到一个声明即“当涉及到线程,很少保证”。可任何一个简要的解释。Java线程概念

+2

你指的是什么文件? – 2011-02-02 18:29:41

+0

scjp kathy's sierra book – satheesh 2011-02-02 18:31:34

回答

2

它可能是试图解释的事实陈述的顺序执行两个线程不能保证,你不能依靠它即顺序可能是一种特殊的方式在一个系统上,可能是在一个完全不同的机器具有不同的硬件。它甚至不能保证在同一个系统上,你将在多次运行中获得相同的序列。

1

我想她的意思是,很少是在当一个线程将启动并完成执行,除非你明确地以某种方式同步这些条件保证。如果多个线程同时读取和写入相同的数据,您也会失去对数据安全性的保证。

1

我还没有看过这本书,它取决于更广泛的背景。但它可能是在讨论线程安全性以及如何在多线程环境中采取额外步骤来确保代码是线程安全的 - 防止诸如死锁,活锁和竞态危险之类的事情(所有这些都可能表现为令人讨厌的难以跟踪的事情导致很多时间和头痛)。所以试图阻止这些事情发生在第一位比后来处理效果要好得多。

典型的(简单的)例如可以由包含两个字段,x和y A类来证明。当下面的方法被称为x和y均为递增:

public void inc() { 
    x++; 
    y++; 
} 

现在通常你会以为这是一个原子操作,调用此方法的唯一结果是,X和Y都递增。但是,在多线程环境中,这不能自动保证。在x递增之后,有可能会产生当前线程,并且另一个线程可能会进入并以无效状态使用该对象,这可能会导致问题。

这只是一个例子,还有很多其他不同类型和类别。总之,你没有获得任何形式的线程安全免费,所以很少有保证,如果你写多线程代码,你需要学习如何应对这些问题。

我建议在实践书中的Java并发为进一步读,那就是解释了线程问题非常好一个伟大的书。