2.3.5使用原子类进行i++操作
在i++操作时除了使用synchronized实现同步外,还可以使用AtomicInteger原子类实现。
原子操作时不能分割的整体,没有其他线程能够中断或者检测正在原子操作中的变量。
一个原子(atomic)类型就是一个原子操作可以的类型,它可以在没有锁的情况下做到线程安全(thread-safe)。
2.2.6原子类也并不完全安全
原子类在具有有逻辑性的情况下输出结果也具有随机性。
2.3.7synchronized代码块有volatile同步的功能
synchronize的可以使多个线程访问同一个资源具有同步性,而且它还具有将线程工作内存中的私有变量与公共内存中的变量同步的功能。
synchronize的可以保证在同一时刻,只有一个线程可以执行某一个方法或某一个代码块。
它包含两个特征:互斥性和可见性。
同步synchronized不仅可以解决一个线程看到对象处于不一致的状态,还可以保证进入同步方法或者同步代码块的每个线程,都看到由同一个锁保护之前所有的修改效果。
第三章 线程间的通信
线程是操作系统中的独立个体,但这些个体如果不经过特殊的处理就不能成为一个整体。
线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高cpu利用率的同时还会使程序员对各线程任务在处理的过程中进行有效的把控和监督。
本章重点掌握技术点:
1)使用wait/notify实现线程间的通信。
2)生产者/消费者模式的实现。
3)方法join的使用。
4)ThreadLocal类的使用。
3.1等待/通知机制
3.1.1不使用等待/通知机制实现线程间通信
使用while语句持续轮询检测一个条件来实现,
但是如果轮询时间间隔很小,更浪费cpu资源;
如果轮询时间间隔很大。有可能会取不到想要的数据。
所以需要一种机制来实现减少cpu的资源浪费,而且可以实现在多个线程间的通信,它就是wait/notify机制。