java中同步有几种实现方法?
一般来说有六种实现方法:
- 使用synchronize关键字,可以是同步代码块,同步方法
- 使用wait和notify
- 使用关键字volatile
- 使用重入锁(ReentrantLock)实现线程同步(JDK5 , java.util.concurrent包)
- 使用ThreadLocal
- 使用堵塞队列(BlockingQueue),其定义了四个常用方法: add(),offer(),take(),put()
- 使用原子变量,需要使用线程同步的根本原因在于对普通变量的操作不是原子的。那么什么是原子操作呢?原子操作就是指将读取变量值、修改变量值、保存变量值看成一个整体来操作即-这几种行为要么同时完成,要么都不完成。在java的util.concurrent.atomic包中提供了创建了原子类型变量的工具类,使用该类可以简化线程同步。其中AtomicInteger 表可以用原子方式更新int的值,可用在应用程序中(如以原子方式增加的计数器),但不能用于替换Integer;可扩展Number,允许那些处理机遇数字类的工具和实用工具进行统一访问。AtomicInteger类常用方法:
AtomicInteger(int initialValue) : 创建具有给定初始值的新的
AtomicIntegeraddAddGet(int dalta) : 以原子方式将给定值与当前值相加
get() ,获取当前值。