任何单线程程序如何成为有效的多线程程序?

rah*_*hul 6 java concurrency multithreading thread-safety

我正在阅读"Java Concurrency In Practice"一书.在第二章中,我阅读了该声明

任何单线程程序也是一个有效的多线程程序

我无法理解这句话.

请分享您的想法,以便清除我的困惑.提前致谢.

Joh*_*ohn 4

请注意,该声明并不意味着任何正确的单线程程序也是正确的多线程程序,作者只是指出可以将任何单线程程序转换为在多线程环境中执行。

但是,如果程序在单线程环境中已经不正确,那么它不可能在更复杂的多线程环境中正确。

摘自书中:

由于任何单线程程序也是有效的多线程程序,因此如果它在单线程环境中甚至不正确,那么它就不是线程安全的。

如果正确实现了一个对象,则任何操作序列(对公共方法的调用以及对公共字段的读取或写入)都应该能够违反其任何不变量或后置条件。对线程安全类的实例顺序或并发执行的任何一组操作都不会导致实例处于无效状态。

和这个:

如果这里对“正确性”的宽松使用让您感到困扰,您可能更愿意将线程安全类视为在并发环境中比在单线程环境中更容易损坏的类。

@yshavit 在您开始考虑多线程正确性之前,请确保您至少具有单线程正确性。

  • 简而言之:在开始考虑多线程正确性之前,请确保至少具有单线程正确性。如果您在单线程上下文中尚未正确,那么您就无法在多线程上下文中正确,并且单线程是一个更容易的问题。 (2认同)