synchronized 注意点
1 . 与 monotor 关联的对象不能为空
2. synchronized 作用域太大
3. 不同的monitor企图锁相同的方法
4. 多个锁的交叉导致思索
程序死锁的原因
1.交叉锁可导致程序出现死锁
2. 内存不足
3. 一问一答模式的数据交换
4. 数据库锁
5. 文件锁
6. 死循环引起的死锁(假死,导致cup高居不下)
wait 和 sleep 的区别
1. wait 和 sleep 都可以使线程进入阻塞状态。
2. wait 和 sleep 方法均是可中断的方法,被中断后都会收到中断异常。
3. wait是Object的方法,而sleep是Thread特有的方法。
4. wait方法执行必须在同步方法中进行,而sleep不需要。
5. 线程在同步方法中执行sleep方法时,并不会释放monitor的锁,而wait方法则会释放monitor的锁。
6. sleep方法短暂休眠之后会主动退出阻塞,而wait方法(如果没有指定时间)则需要被其他线程中断后才可以退出,或者被唤醒(notify, notifyAll)。