码迷,mamicode.com
首页 > 移动开发 > 详细

Android(java)学习笔记69:JDK5之后的Lock锁的概述和使用

时间:2015-05-17 10:41:38      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

 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 }

 

Android(java)学习笔记69:JDK5之后的Lock锁的概述和使用

标签:

原文地址:http://www.cnblogs.com/hebao0514/p/4509213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!