1.线程安全
就是指多个线程操作同一个对象时采用了加锁机制,只有在当前线程操作这个对象完毕之后,其他线程才能操作这个对象。因此可防止数据不一致现象。
2.非线程安全
是指多个线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题。
3.经常遇到的
线程安全的 :Vector HashTable StringBuffer
线程不安全的:ArrayList HashMap StringBuilder LinkedList
4.还有一点需要注意的就是:
非线程安全 != 不安全
举个例子说明,例如在主线程中new的一个ArrayList然后多个线程操作同一个ArrayList对象。
如果是每个线程中new一个ArrayList,而这个ArrayList只在这一个线程中使用,那么肯定是没问题的。换句话说,在使用非线程安全的时候,只需要让每一个线程只操作自己对应的那一个对象就肯定没问题的。
5.线程安全的实现
线程安全是通过线程同步控制来实现的,也就是在代码块或者方法上加synchronized关键字。当然了,多个synchronized关键字修饰的代码块必须是使用的同一个监视器,只有这样才是真的同步;否则,也实现不了同步。
6.加同步锁会使程序性能降低