三个问题
- 竞态条件
- 死锁
- 内存可见性
规则
- 访问共享变量时需要同步
- 读线程和写线程都要同步化
- 持有锁的时间应该尽可能短
- 按照全局的固定的顺序来获得多把锁
- 持有锁时避免调用外星方法
java中的一些问题
- 编译器的静态优化可以打乱代码的执行顺序
- JVM的动态优化也会打乱代码的执行顺序
- 硬件可以通过乱序执行来优化其性能
线程
- 有时候一个线程的修改 可能对另一个线程不可见
java内存模型
- 如果读线程和写线程不进行同步,就不能保证可见性
- 同步方法
- 获取对象内置锁
- 开启一个线程并且通过join()检查线程是否已经终止。
- 使用java.util.concurrent包提供的工具