* JDK5以后提供了更具体的锁定对象,可以获取以及释放,它和synchronized用法一样,提供很多功能
* Lock 接口,不能实例化提供了更具体的锁:可重入锁:ReentrantLock
* public void lock():获取锁
* public void unlock():试图释放该锁
public class LockDemo {
public static void main(String[] args) {
//创建一个资源类对象
SellTicket st=new SellTicket();
//创建Thread类对象
Thread t1=new Thread(st,"窗口1");
Thread t2=new Thread(st,"窗口2");
Thread t3=new Thread(st,"窗口3");
//启动线程
t1.start();
t2.start();
t3.start();
}
}
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class SellTicket implements Runnable {
//100张票
private static int tickets=100;
//创建具体的锁对象
private Lock lock=new ReentrantLock();
@Override
public void run() {
while(true) {
try {
lock.lock();
if(tickets>0) {
try {
Thread.sleep(tickets);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" "+(tickets--));
}
}finally {
//释放资源
lock.unlock();
}
}
}
}