java多线程中线程安全和非线程安全
线程安全是指多个线程操作同一个对象,不会产生不一致的结果,非线程安全就可能出现每次的执行结果都不一致。
线程安全方式:
1.使用volatile关键字修饰的变量多所有线程可见,当一个线程修改了变量的值,新的值会立即从当前线程工作空间同步到主内存当中,而其他线程读取这个变量的时候,也会从主内存中拉取最新的变量值,但如果对该变量的操作含有原子操作时,不能保证线程安全。
2.使用很多synchronized关键字来同步控制,所以必然会导致性能的降低。
注意非线程安全不是说不安全,有人在使用过程中有一个不正确的观点:我的程序是多线程的,不能使用ArrayList要使用Vector,这样才安全。非线程安全并不是多线程环境下就不能使用。注意我上面有说到:多线程操作同一个对象。注意是同一个对象。如果是在主线程中new的一个ArrayList然后多个线程操作同一个ArrayList对象,那就时非线程安全,如果是每个线程中new一个ArrayList,而这个ArrayList只在这一个线程中使用,那么肯定是没问题的。
示例代码参考:http://blog.****.net/xiao__gui/article/details/8934832