|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
线程安全包含原子性和可见性两个方面 Java同步机制都是围绕着两个方面确保线程安全
Synchronized与Volatile比较
1、volatile是线程同步的轻量级的实现,性能比synchronized要好
2、volatile只修饰于变量 synchronized可以修饰方法以及代码块
3、volatile不会发生阻塞 synchronized会阻塞
4、volatile可以保证数据的可见性 synchronized可保证数据的原子性以及简洁保证可见性(它会将私有内存和公共内存中的数据做同步)
5、volatile解决的是变量在多个线程之间的可见性
synchronized解决的是多个线程之间访问资源的同步性
Java中的数组是一个对象 特殊的对象
Volatile不具备同步性,那么也就不具备原子性
变量在内存中工作的过程:
1、read和load阶段:从主存复制变量到当前线程工作内存
2、use和assgin阶段:执行代码 改变共享变量值
3、store储存和write阶段:用工作内存数据刷新主存对应变量的值
在i++操作时可使用synchronized关键字实现同步外,还可以使用AtomicInteger原子类实现
可以在没有锁的情况下做到thread-safe
原子类并非完全安全
原子类在具有有逻辑性的情况下输出结果也具有随机性
由于addAndGet()方法是原子性的,但是方法使用两次,方法和方法之间的调用却不是原子性的,多线程之间可以随意调用,不必等一个线程完全执行完addNum()方法
为了解决输出结果随机性,需要给addNum()方法加上关键字synchronized
关键字synchronized
1、可以使多个线程访问同一个资源具有同步性
2、可以将多线程工作内存中的变量和公共内存中的变量同步
学习多线程 外练互斥 内修可见
对象数组 类作为一种数据类型,创建对象数组 与直接用类new对象相似
控制反转
|
评分
-
查看全部评分
|