Android(java)学习笔记69:JDK5之后的Lock锁的概述和使用
1 package cn.itcast_01; 2 3 import java.util.concurrent.locks.Lock; 4 import java.util.concurrent.locks.ReentrantLock; 5 6 public class SellTicket implements Runnable { 7 8 // 定义票 9 private int tickets = 100; 10 11 // 定义锁对象 12 private Lock lock = new ReentrantLock(); 13 14 @Override 15 public void run() { 16 while (true) {//这里利用try{}finally{},是因为担心程序加锁之后出问题,不能跳出解锁 17 try { 18 // 加锁 19 lock.lock(); 20 if (tickets > 0) { 21 try { 22 Thread.sleep(100); 23 } catch (InterruptedException e) { 24 e.printStackTrace(); 25 } 26 System.out.println(Thread.currentThread().getName() 27 + "正在出售第" + (tickets--) + "张票");
28 } 29 } finally { 30 // 释放锁 31 lock.unlock(); 32 } 33 } 34 } 35 36 }
1 package cn.itcast_01; 2 /* 3 * 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁, 4 * 为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock。 5 * 6 * Lock:(接口) 7 * void lock(): 获取锁。 8 * void unlock():释放锁。 9 * ReentrantLock是Lock的实现类.(接口实现类) 10 */ 11 public class SellTicketDemo { 12 public static void main(String[] args) { 13 // 创建资源对象 14 SellTicket st = new SellTicket(); 15 16 // 创建三个窗口 17 Thread t1 = new Thread(st, "窗口1"); 18 Thread t2 = new Thread(st, "窗口2"); 19 Thread t3 = new Thread(st, "窗口3"); 20 21 // 启动线程 22 t1.start(); 23 t2.start(); 24 t3.start(); 25 } 26 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。