介绍
问题:
因为多个线程同时操作一个数据,会导致数据不安全
解决方法:
使用锁将其封锁,包装对数据的操作同时只能有一个线程
注意:
多个线程使用同一个锁
如何使用
同步代码块
语法:
synchronized(锁对象){
}
注意:所有类的对象都是锁对象
同步方法
语法:
访问权限修饰符 synchronized 返回值类型 方法名(形参列表){
方法体
}
注意:谁调用同步方法,谁就是该同步的锁对象
同步静态方法
语法:
访问权限修饰符 static synchronized 返回值类型 方法名(形参列表){
方法体
}
注意:同步静态方法的锁对象是该类的类对象,一个类就一个类对象
死锁
原因:
多个线程互相持有对方所需的锁资源
如何避免
尽量不要再同步代码块中使用同步代码块或同步方法
尽量不要再同步方法中使用同步代码块或同步方法
总结:尽量不要再同步中使用同步
线程间通讯
休眠
wait(),在休眠时会释放锁对象唤醒
notify():
随机唤醒一个以调用该方法的对象作为锁对象的无限期休眠的线程,
notifyAll()
唤醒所有使用该对象作为锁对象的正在无限期休眠的线程注意:
1,这三个方法是Object提供的
2,必须在同步中使用
3,必须使用锁对象调用