Lock实现线程安全:(同时保证,创建的多线程锁是一样)
//线程安全方法三 :用Lock实现线程安全的步骤
//示例: 售卖100张门票,实现多个窗口售卖
public class ThreadDemo3 implements Runnable {
//1.实例化一个lock子类对象
private ReentrantLock lock = new ReentrantLock();
private int numTicket = 100;
@Override
public void run() {
while (true) {
try {
//2.调用锁定方法
lock.lock();
if (numTicket>0) {
System.out.println(Thread.currentThread().getName() + "卖出的票号 :" + numTicket);
numTicket--;
}else return;
}finally {
//3.调用解锁方法
lock.unlock();
}
}
}
public static void main(String[] args) {
ThreadDemo3 thread = new ThreadDemo3();
Thread t1 = new Thread(thread);
Thread t2 = new Thread(thread);
Thread t3 = new Thread(thread);
t1.start();
t2.start();
t3.start();
}
}
synchronized机制在执行完代码后会,自动释放同步监视器。
Lock需要手动启动同步监视器,和手动结束同步监视器
优先使用:
Lock----同步代码块---同步方法