zoukankan      html  css  js  c++  java
  • Android(java)学习笔记9:JDK5之后的Lock锁的概述和使用

    1. Lock锁的概述:

    java.util.concurrent.locks,接口Lock

    首先Lock是一个接口,Lock实现提供了比使用synchronized方法 和 同步代码块更为广泛的锁定操作。

    void  lock():获取锁

    void  unlock():释放锁

    上面Lock是接口,我们要找它的实现类,如下:

    ReentrantLock ReentrantReadWriteLock.ReadLockReentrantReadWriteLock.WriteLock

    2. 关于Lock锁的使用,如下:

     1 package com.himi.test;
     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 = 40;
    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 com.himi.test;
     2 
     3 public class SellTicketDemo {
     4     public static void main(String[] args) {
     5         // 创建资源对象
     6         SellTicket st = new SellTicket();
     7 
     8         // 创建三个窗口
     9         Thread t1 = new Thread(st, "窗口1");
    10         Thread t2 = new Thread(st, "窗口2");
    11         Thread t3 = new Thread(st, "窗口3");
    12 
    13         // 启动线程
    14         t1.start();
    15         t2.start();
    16         t3.start();
    17     }
    18 }

    上面程序的运行结果如下,Console结果如下:

    窗口1正在出售第40张票
    窗口3正在出售第39张票
    窗口3正在出售第38张票
    窗口3正在出售第37张票
    窗口3正在出售第36张票
    窗口3正在出售第35张票
    窗口2正在出售第34张票
    窗口2正在出售第33张票
    窗口2正在出售第32张票
    窗口2正在出售第31张票
    窗口2正在出售第30张票
    窗口2正在出售第29张票
    窗口1正在出售第28张票
    窗口3正在出售第27张票
    窗口3正在出售第26张票
    窗口3正在出售第25张票
    窗口3正在出售第24张票
    窗口2正在出售第23张票
    窗口2正在出售第22张票
    窗口2正在出售第21张票
    窗口2正在出售第20张票
    窗口1正在出售第19张票
    窗口1正在出售第18张票
    窗口1正在出售第17张票
    窗口3正在出售第16张票
    窗口3正在出售第15张票
    窗口3正在出售第14张票
    窗口3正在出售第13张票
    窗口3正在出售第12张票
    窗口3正在出售第11张票
    窗口2正在出售第10张票
    窗口2正在出售第9张票
    窗口1正在出售第8张票
    窗口3正在出售第7张票
    窗口3正在出售第6张票
    窗口2正在出售第5张票
    窗口1正在出售第4张票
    窗口1正在出售第3张票
    窗口1正在出售第2张票
    窗口3正在出售第1张票

  • 相关阅读:
    Atomikos 中文说明文档(周枫翻译) 东师理想
    flex手机项目嵌套html页面和html页面播放声音文件 东师理想
    sql server 创建 ASPState 数据库方法 东师理想
    Android中文API(博客翻译版转载) 东师理想
    sql server导入excel和多表关联更新 东师理想
    关于CSS样式zindex在firefox和平板电脑中的问题 东师理想
    使用Flash builder 4.6创建Flex手机项目读取XML文件方法 东师理想
    android动画切换(滑屏效果)实例 东师理想
    一个障碍,就是一个超越自我的契机(转载)
    多去阅读思维训练类的书籍(转载)
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4509213.html
Copyright © 2011-2022 走看看