如果一个类被设计成允许多个线程可以同时访问,比如下面这个类就被设计为允许多个线程同时访问:(当前的实例对象作为锁)
public class Counter
{
private int count = 0;
public void add(int n)
{
synchronized(this)
{
count += n;
}
}
public void dec(int n)
{
synchronized(this)
{
count -= n;
}
}
public int get()
{
return count;
}
}
那么这个线程就是线程安全的
Java标准库的java.lang.StringBuffer就
是线程安全的
大部分类,例如ArrayList
,都是非线程安全的类,我们不能在多线程中修改它们。但是,如果所有线程都只读取,不写入,那么ArrayList
是可以安全地在线程间共享的。
没有特殊说明时,一个类默认是非线程安全的。