Lock锁的引入
Lock锁引入自java.util.concurrent.locks.ReentrantLock
java.util.concurrent简称juc包下
如果要实现线程同步,可以用三种方式来实现,其性能排行为
Lock锁>synchronized代码块>synchronized方法
LockDemo
package com.design;
import java.util.concurrent.locks.ReentrantLock;
public class LockDemo {
public static void main(String[] args) {
SellTickets sellTickets = new SellTickets();
new Thread(sellTickets,"张三").start();
new Thread(sellTickets,"李四").start();
new Thread(sellTickets,"黄牛党").start();
}
}
class SellTickets implements Runnable{
int tickets = 10;
private final ReentrantLock lock = new ReentrantLock();
void sell() {
while (tickets > 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
lock.lock();
if(tickets<=0)
{
break;
}
System.out.println("第"+tickets+"张票卖给"+Thread.currentThread().getName()+"了");
tickets--;
}finally {
lock.unlock();
}
}
}
@Override
public void run() {
sell();
}
}
在以上案例中,我们在判断卖票逻辑上锁,在卖票结束后解锁,便可使线程安全。