我刚接触Java。 Threadsafe和synchronized有点让我感到困惑。 Threadsafe表示一个方法或者类实例能够同时被多个线程使用而不会出现问题。 而Synchronized则是指只有一个线程可以在同一时间操作。
那么它们之间有什么关联呢?
我刚接触Java。 Threadsafe和synchronized有点让我感到困惑。 Threadsafe表示一个方法或者类实例能够同时被多个线程使用而不会出现问题。 而Synchronized则是指只有一个线程可以在同一时间操作。
那么它们之间有什么关联呢?
Java Concurrency in Practice中给出的线程安全定义是:
例如,java.text.SimpleDateFormat对象具有内部可变状态,在调用解析或格式化方法时会进行修改。如果多个线程调用相同日期格式对象的方法,则有可能某个线程会修改其他线程所需的状态,导致某些线程获得的结果错误。有可能导致内部状态损坏并产生错误输出的可能性使得此类不是线程安全的。一个类在被多个线程访问时,无论运行环境如何调度或交错执行这些线程,并且在调用代码没有进行额外同步或其他协调的情况下,都能正确地表现出来,则该类是线程安全的。
线程安全是程序的期望行为,synchronized
块可以帮助您实现这种行为。还有其他获得线程安全的方法,例如不可变类/对象。希望这可以帮到您。
synchronized
是实现线程安全代码的一种基本方法。在实践中,性能方面,线程安全、同步、非线程安全和非同步类的顺序如下:
Hashtable(slower) < Collections.SynchronizedMap < HashMap(fastest)