smallFishBug 发表于 2017-6-17 22:16:40

Java多线程06

线程安全包含原子性和可见性两个方面 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对象相似

控制反转

零度非安全 发表于 2017-6-18 00:06:38

内容不错,排板也比之前进步许多,nice

smallFishBug 发表于 2017-6-18 10:39:33

零度非安全 发表于 2017-6-18 00:06
内容不错,排板也比之前进步许多,nice

哈哈~谢谢,我会继续努力的~
页: [1]
查看完整版本: Java多线程06