package com.wyz.juc;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* 1.用于解决多线程安全问题的方式:
* synchronized:
* 1.同步代码块
* 2.同步方法
* <p>
* jdk1.5后
* 3.同步锁 Lock
* 注意:是一个显示的锁,需要通过lock()方法上锁,必须通过unlock()方法进行释放锁
*
*
* 在 Java 5.0 之前,协调共享对象的访问时可以使用的机
* 制只有 synchronized 和 volatile 。Java 5.0 后增加了一些
* 新的机制,但并不是一种替代内置锁的方法,而是当内
* 置锁不适用时,作为一种可选择的高级功能。
* ReentrantLock 实现了 Lock 接口,并提供了与
* synchronized 相同的互斥性和内存可见性。但相较于
* synchronized 提供了更高的处理锁的灵活性。
* @author WangChong
*/
public class TestLock {
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(ticket, "1号窗口").start();
new Thread(ticket, "2号窗口").start();
new Thread(ticket, "3号窗口").start();
}
}
class Ticket implements Runnable {
private int tick = 100;
private Lock lock = new ReentrantLock();
@Override
public void run() {
while (true) {
lock.lock();
try {
if (tick > 0) {
try {
Thread.sleep(200);
System.out.println(Thread.currentThread().getName() + "完成售票,余票为:" + --tick);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} finally {
lock.unlock();//释放锁
}
}
}
}
juc学习备忘录8 --显示锁 Lock
最新推荐文章于 2022-11-03 08:19:45 发布