转载于http://dapp66.iteye.com/blog/1669865
线程安全是说同一个代码块,一个时间点只能有一个线程访问它。编写线程安全的代码是依靠线程同步。
首先来看看线程安全的实现原理:
jvm有一个main memory,而每个线程有自己的working memory,一个线程对一个变量进行操作时,都要在自己的working memory里面建立一个copy,操作完之后再写入main memory。多个线程同时操作同一个变量,就可能会出现不可预知的结果。用synchronized的关键是建立一个镜像,这个镜像可以是要修改的变量也可以其他你认为合适的对象比如方法和类,然后通过给这个镜像加锁来实现线程安全,每个线程在获得这个锁之后,要执行完才会释放它得到的锁。这样就实现了所谓的线程安全。
在JDK的集合框架中,有一些是线程安全的,比如:Hashtable、Vector等,这些接口由于本身的代码中就实现了同步,所以效率比较低,已经被取代,实际中也使用的比较少。
注意:如果线程操作的对象的成员变量不是同一个,那么可以把这个对象的类定义成线程不安全的。