java线程概念

时间:2011-02-02 18:28:15

标签: java multithreading

当我阅读java线程概念时,我看到了一个声明,即“当涉及到线程时,几乎没有保证”。任何人都可以解释这一点。

3 个答案:

答案 0 :(得分:2)

它可能试图解释这样一个事实:两个线程中的语句执行顺序无法保证,你不能依赖它,即顺序可能在一个系统上以特定方式进行,并且在一台机器上可能完全不同使用不同的硬件。它甚至不能保证在同一系统上,你将在多次运行中得到相同的序列。

答案 1 :(得分:1)

我认为她的意思是,在线程何时开始和完成执行方面保证很少,除非你以某种方式明确地同步它们。如果多个线程同时读取和写入相同的数据,您也将失去对数据安全性的保证。

答案 2 :(得分:1)

我自己没有读过这本书,这取决于更广泛的背景。但它可能正在谈论线程安全以及如何在多线程环境中采取额外步骤以确保您的代码是线程安全的 - 防止诸如死锁,活锁和种族危险之类的事情(所有这些都可能表现为讨厌,难以跟踪导致大量时间和头痛的方法。)因此,首先尝试防止这些事件的发生比以后处理这些影响要好得多。

典型的(简单)示例可以通过包含两个字段x和y的A类来演示。当调用以下方法时,x和y都会递增:

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

现在通常你会假设这是一个原子操作,调用这个方法的唯一结果是x和y都递增了。但是,在多线程环境中,无法自动保证。在递增x之后,当前线程可能会被放弃,而另一个可能会进入并使用该对象处于无效状态,这可能会导致问题。

这只是一个例子,还有许多其他不同的类型和类别。简而言之,您不会免费获得任何形式的线程安全,因此保证很少,如果编写多线程代码,您需要学习如何应对这些问题。

我推荐将Java并发性实践书作为进一步阅读,这是一本非常好的解释线程问题的书。