Lock的用法

来源:互联网 发布:python .shift[1] 编辑:程序博客网 时间:2024/06/05 22:50
package test45;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/*** *  * @author samsung * *虽然我们理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加了锁,在哪里解了锁  *为了更清晰的表达如何加锁和释放锁,JDK5提供了一个新的对象Lock *Lock: *      void lock();获取锁 *      void unlock();释放锁 */public class test45 {    public static void main(String[] args) {        //创建资源对象            sells s=new sells();        //创建线程对象        Thread t1=new Thread(s,"窗口1");        Thread t2=new Thread(s,"窗口2");        Thread t3=new Thread(s,"窗口3");        t1.start();        t2.start();        t3.start();    }}class sells implements Runnable {    //定义票    private int tickets=100;    //定义锁对象    private Lock lock=new ReentrantLock();    @Override    public void run() {        // TODO Auto-generated method stub        //加锁        lock.lock();        while(tickets>0) {            try {                Thread.sleep(100);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            System.out.println(Thread.currentThread().getName()+"正在出售第"+(tickets--)+"张票");        }        //释放锁        lock.unlock();    }}
1 0