操作同一变量时,存在线程安全问题,JMM java内存模型,当多线程操作同一变量,先进行主线程的变量加载到本地线程一个副本,然后回写到主线程。这样就会存在,多个线程加载变量相同。
java并发编程三大特性:原子性 可见性 有序性
volatile 解决 可见性 有序性
synchronized解决原子性 jdk1.5推出的lock也可以解决这个问题。lock性能有提升。但是需要稍微多的操作。
syn 原理,monitor监视器,监控对象一个锁。monitor入口和出口进行锁的判断和控制。

wait notify
必须有锁 才进行 等待 唤醒。
线程对象的等待和唤醒,可以解决,一些编程问题,比如,按顺序输出奇偶数,生产者消费者问题。