java中线程安全提现在两个方面
在Java里,线程安全一般体现在两个方面:
(1)多个thread对同一个java实例的访问(read和modify)不会相互干扰,它主要体现在关键字synchronized.如ArrayList和Vector,HashMap和Hashtable(后者每个方法前都有synchronized关键字)。如果你在Iterator遍历一个List对象时,同时其它线程remove一个element时,就会出现问题,数据丢失。(ArrayList是非线程安全的,而Vector是线程安全的;HashMap是非线程安全的,而Hashtable是线程安全的。)
(2)每个线程都有自己的私有字段或变量,这样可以不会在多个线程之间共享。它主要体现在java.lang.ThreadLocal类,而没有Java关键字支持,如像static、transient那样。(一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个对象的所有属性和方法都会自动序列化。 然而在实际开发过程中,某些类的有些属性需要序列化,而其他属性不需要被序列化时,则可以借助java的transient关键字。在需要序列化对象的时候,实现Serilizable接口,将类中不需要序列化的属性前添加关键字transient,那么带transient关键字的属性就不会序列化到指定的目的地中。)
java线程安全理解&#