1、解决线程并发安全问题的第二种方法_加Lock锁
线程并发安全可以加两种锁
<1>第一种:syncronized关键字
缺点:需要频繁判断锁对象存在与否,效率较低
<2>第二种:加Lock锁
可以手动加锁和解锁,解决了判断锁存在与否的问题。
2、LOCK锁的使用步骤
<1>、lock是接口,要用他的实现类来实现。
<2>、代码演示:
Lock lock = new ReentrantLock();
3、小案例演示实现:
public class entity implements Runnable {
//1、定义票数
int ticket = 100;
//5、创建Lock锁对象
Lock lock = new ReentrantLock();
@Override
public void run() {
//定义线程任务,提供卖票服务
//2、进入卖票服务条件检测
while (true){
//4、给线程加锁,syncronized锁频繁判断锁对象的存在,而lock锁则可解决这个问题
lock.lock();
//3、看票的余额
if(ticket>0){
//6、线程要睡眠,不然其他线程拿不到资源
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程"+Thread.currentThread().getName()+"再在买第"+ticket+"张票");
ticket--;
}
lock.unlock();
}
}
}
public class lockDemo01 {
public static void main(String[] args) {
entity entity = new entity();
Thread thread = new Thread(entity);
Thread thread1 = new Thread(entity);
Thread thread2 = new Thread(entity);
thread.start();
thread1.start();
thread2.start();
}
}