线程安全、非线程安全

2/22/2017来源:ASP.NET技巧人气:4904

线程安全:当多个线程类并发操作某类的某个方法,(在该方法内部)来修改这个类的某个成员变量的值,

                    不会出错,则我们就说,该的这个方法是线程安全的。

线程不安全(非线程安全):当多个线程类并发操作某类的某个方法,(在该方法内部)来修改这个类的某个成员

                    变量的值,很容易就会发生错误,故我们就说,这个方法是线程不安全的。如果要把这个方法变成线

                    程安全的,则用 synchronized关键字来修饰该方法即可。

总结:线程安全对共享变量互斥访问              非线程安全不是             所以要是线程间数据相关则而又不是线程安全的话,很危险的

举例说明:ArrayList和Vector、 HashMapHashTable、StringBuilderStringBuffer

                    ArrayList是非线程安全的,Vector是线程安全的;

         HashMap是非线程安全的,HashTable是线程安全的;

         StringBuilder是非线程安全的,StringBuffer是线程安全的。

       ArrayListVector:

      1、如果List不会被多线程并发访问,使用ArrayList就没有问题,而且速度效率要高些;       2、如果有多线程并发访问List,可以使用Vector,也可以使用ArrayList,

         并且自己对可能出现并发冲突的地方自行做synchronized处理。

简单的来讲,在多线程情况下 vector.add(e),这样写就好了,如果你用ArrayList.add(e),那么你就得这样  synchronized(ArrayList)  {      ArrayList.add(e)  }  vector:内部已经做了这样的处理了