• java 22


    在之前解决线程安全的过程中,虽然我们可以理解同步代码块和同步方法的锁对象问题,

    但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,

    为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock

    注意:Lock是个接口。

    2个常用方法:
       void lock(): 获取锁。
       void unlock():释放锁。
     ReentrantLock是Lock的实现类。

     1 public class SellTicket implements Runnable {//别忘了这个继承接口
     2     // 定义100张票
     3     private int tickets = 100;
     4 
     5     // 定义锁对象
     6     private Lock lock = new ReentrantLock();
     7 
     8     public void run() {
     9 
    10         //这里使用了不带catch的try..finally的格式,中间的代码出现问题了,就直接执行finally
    11 
    12         while (true) {
    13             try {
    14                 
    15                 // 加锁,在会出现错误的代码前加锁,跟之前的一样
    16                 lock.lock();
    17                 
    18                 if (tickets > 0) {
    19                                         
    20                     // 休眠0.1秒
    21                     try {
    22                         Thread.sleep(100);
    23                     } catch (InterruptedException e) {
    24                         // TODO Auto-generated catch block
    25                         e.printStackTrace();
    26                     }
    27 
    28                     System.out.println(Thread.currentThread().getName()
    29                             + "正在出售第" + (tickets--) + "张票");
    30                 }
    31             } finally {
    32                 // 解锁  中间代码一有异常,就解锁,
    33                 lock.unlock();
    34             }
    35         }
    36     }
    37 }
    何事都只需坚持.. 难? 维熟尔。 LZL的自学历程...只需坚持
  • 相关阅读:
    JSE-1.1.4 内存屏障和CPU缓存
    Ajax
    R手册(Common)--R6 and S4
    掌握 小程序项目新建后的 初始代码 及 git远程管理(2)
    微信小程序 网课学习笔记 开发前的准备工作(1)
    vuex中action如何互相调用
    ajax请求时,请求路径自动拼上页面路径?
    10个免费的CDN
    java面向对象
    java中方法的递归调用
  • 原文地址:https://www.cnblogs.com/LZL-student/p/5946893.html
Copyright © 2020-2023  润新知