线程同步synchronized
并发:同一个对象被多个线程同时操作
同步的简单实现:队列加锁!
synchronized可以锁方法也可以锁代码块
方法:使用synchronized关键字修饰方法
代码块:synchronized(object){代码块}
* @PackageName:Threadtest
* @ClassName:SynThread_ticket
* @Description:对抢票使用同步方法,保证线程安全
* @date 2021/8/11 20:29
*/
public class SynThread_ticket implements Runnable{
private int tickets=10;
boolean flag=true;
@Override
public synchronized void run() {
while (flag) {
try {
buy();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void buy() throws InterruptedException {
if (tickets<=0){
flag=false;
return;
}
Thread.sleep(100);
System.out.println(Thread.currentThread().getName()+"拿到了第"+tickets--+"张票");
}
public static void main(String[] args) {
SynThread_ticket synThread_ticket = new SynThread_ticket();
new Thread(synThread_ticket,"广东人").start();
new Thread(synThread_ticket,"上海人").start();
new Thread(synThread_ticket,"北京人").start();
}
}
死锁:
产生死锁的四个条件:
互斥条件
不可剥夺条件
请求和保存条件
循环等待条件
LOCK锁(显示定义,捕获异常finally显示释放锁)
Reentrantlock:可重入锁,可限时,可中断,公平锁