Java实现线程同步的几种方式

为何要使用同步?
java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前被其他线程调用。

1.同步方法

用synchronized关键字修饰的方法。 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。

2.同步代码块

 synchronized(object){ 
 }

3.可重入锁ReentrantLock

JavaSE5.0中新增了一个java.util.concurrent包来支持同步。ReentrantLock类是可重入、互斥、实现了Lock接口的锁, 它与使用synchronized关键字具有相同的基本行为和语义,并且扩展了其能力。

4.volatile关键字

a.volatile关键字为域变量的访问提供了一种免锁机制
b.使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新
c.因此每次使用该域就要重新计算,而不是使用寄存器中的值
d.volatile不会提供任何原子操作,它也不能用来修饰final类型的变量

5.线程局部变量ThreadLocal

发布了516 篇原创文章 · 获赞 89 · 访问量 73万+

猜你喜欢

转载自blog.csdn.net/yzpbright/article/details/104674785