JDK5以后的Lock锁的概述和使用

    科技2026-04-11  5

    package cn.itcast_01; /* * 虽然我们可以理解同步代码块和同步方法的锁对象问题, * 但是我们并没有直接看到在哪里加了锁,在哪里放了锁 * 为了跟清晰的表达如何加锁和释放锁 * JDK5以后提供了一个新的锁对象Lock * * Lock: * void lock()获取锁 * void unlock()释放锁 * ReentarntLock是Lock的实现类 */ public class JDK5以后的Lock锁的概述和使用 { public static void main(String[] args) { //创建线程变量 SellRunnable sr = new SellRunnable(); //创建三个窗口 Thread t1 = new Thread(sr , "窗口1"); Thread t2 = new Thread(sr , "窗口2"); Thread t3 = new Thread(sr , "窗口3"); //启动线程 t1.start(); t2.start(); t3.start(); } }

    定义锁

    package cn.itcast_01; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class SellRunnable implements Runnable { //定义票 private int tickets = 100; //定义锁对象 private Lock lock = new ReentrantLock(); @Override public void run() { while(true) { try { //加锁 lock.lock(); if(tickets>0) { try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"正在出售"+ (tickets--)+"票"); } }finally{ lock.unlock(); } } } }
    Processed: 0.022, SQL: 12