我应该把我所有的java代码都安全吗?

Rah*_*hul 4 java concurrency multithreading

我正在阅读Brian Goetze的Java Concurrency in Practice中的一些并发模式,并对何时是使代码线程安全的正确时间感到困惑.

我常写的意思在单个线程中运行的代码,所以我不担心太多线程安全和同步等,但始终存在,同样的代码可以晚些时候在多线程环境中重新使用的可能性.

所以我的问题是,什么时候应该开始考虑线程安全?我是否应该在开始时假设最坏的并且始终从头开始编写线程安全的代码,或者我是否应该重新访问代码并修改线程安全性,如果以后需要这样的话?

是否存在一些并发模式/反模式,即使在编写单线程应用程序时也必须始终注意这些模式/反模式,以便我的代码在以后在多线程环境中使用时不会中断?

cle*_*tus 12

当您的代码将在多线程环境中使用时,您应该考虑线程安全性.如果它只在单线程环境中运行,那么解决复杂性是没有意义的.

话虽这么说,你可以做一些简单的事情,无论如何都是好的做法,并将有助于多线程:

  1. 正如约什布洛赫所说,偏爱不变性.根据定义,不可变类是线程安全的;
  2. 仅在需要时使用数据成员或静态变量而不是方便.

  • +1.此外,线程安全通常会带来性能损失.我通常会尝试记录当它们与其他基本上是线程安全的类共享一个包时线程不安全的类,因此规范的例外是显而易见的. (2认同)