多线程_DK5之后的Lock锁的概述和使用

来源:互联网 发布:mysql having count 编辑:程序博客网 时间:2024/06/05 15:37
package cn.itcast_01;/* * 虽然我们可以理同步代码块和同步方法的锁对象问题,但是我们没有直接看到在哪里加上了锁,在哪里释放了锁。 * 为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock。 *  * Lock: * void lock():获取锁(加锁)。 * void unlock():释放锁(解锁)。 * ReentrantLock是Lock的实现类。 */public class SellTicketDemo {public static void main(String[] args) {// 创建资源对象SellTicket st = new SellTicket();// 创建线程对象Thread t1 = new Thread(st, "窗口1");Thread t2 = new Thread(st, "窗口2");Thread t3 = new Thread(st, "窗口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 SellTicket implements Runnable {// 电影票数量private int tickets = 100;// 创建锁对象private Lock lock = new ReentrantLock();@Overridepublic void run() {while (true) {try {// 加锁lock.lock();try {Thread.sleep(100);} catch (InterruptedException e) {System.out.println("线程中断");}if (tickets > 0) {System.out.println(Thread.currentThread().getName()+ "正在出售第张" + (tickets--) + "电影票");}} finally {// 释放锁lock.unlock();}}}}


0 0
原创粉丝点击