Java线程安全与同步

接触Java的集合框架的时候,总是免不了听到线程安全、同步这两个概念,以前也没有仔细去了解过是什么意思,刚才了解了一下,感觉就是一个意思,线程安全依靠的就是同步机制。

线程安全就是说多线程访问同一代码,不会产生不确定的结果。编写线程安全的代码是低依靠线程同步。

 

首先来看看线程安全的实现原理:

jvm有一个main memory,而每个线程有自己的working  memory,一个线程对一个变量进行操作时,都要在自己的working   memory里面建立一个copy,操作完之后再写入main  memory。多个线程同时操作同一个变量,就可能会出现不可预知的结果。用synchronized的关键是建立一个镜像,这个镜像可以是要修改的变量也可以其他你认为合适的对象比如方法和类,然后通过给这个镜像加锁来实现线程安全,每个线程在获得这个锁之后,要执行完才会释放它得到的锁。这样就实现了所谓的线程安全。

 

在JDK的集合框架中,有一些是线程安全的,比如:Hashtable、Vector等,这些接口由于本身的代码中就实现了同步,所以效率比较低,已经被取代,实际中也使用的比较少。

你可能感兴趣的:(Java线程安全与同步)