• 同步锁Lock


    用于解决多线程安全问题有三种方式:

    • 同步代码块(隐式锁,基于JVM)
    • 同步方法(隐式锁,基于JVM)
    • 同步锁(显式锁,jdk1.5后出现,相对于前两种方式,更加灵活)

    下面通过一段程序来说明一下同步锁的简单使用。

     1 package com.ccfdod.juc;
     2 
     3 import java.util.concurrent.locks.Lock;
     4 import java.util.concurrent.locks.ReentrantLock;
     5 
     6 /**
     7  * 用于解决多线程安全问题的方式:
     8  * 1、同步代码块(synchronized):隐式锁,基于jvm
     9  * 2、同步方法(synchronized):隐式锁,基于jvm
    10  * 3、同步锁Lock:出现于jdk1.5后,相对于前两种方式,更加灵活,显式锁
    11  * 注意:这是一个显示锁,需要通过lock()方法上锁,必须通过unlock()方法进行释放锁,
    12  *     因此使用有风险(存在一定的安全隐患),因为是通过方法来释放锁,所以要注意释放,一般将unlock()方法放置finally中
    13  */
    14 public class TestLock {
    15 
    16     public static void main(String[] args) {
    17         Ticket ticket = new Ticket();
    18         
    19         new Thread(ticket, "1号窗口").start();
    20         new Thread(ticket, "2号窗口").start();
    21         new Thread(ticket, "3号窗口").start();
    22     }
    23 }
    24 
    25 class Ticket implements Runnable {
    26     private int tick = 100;
    27     
    28     private Lock lock = new ReentrantLock();
    29 
    30     @Override
    31     public void run() {
    32         while(true) {
    33             lock.lock();
    34             try {
    35                 if (tick > 0) {
    36                     try {
    37                         Thread.sleep(200);
    38                     } catch (InterruptedException e) {
    39                         e.printStackTrace();
    40                     }
    41                     System.out.println(Thread.currentThread().getName() + " 完成售票,余票为:" + --tick);
    42                 }
    43             } finally {
    44                 lock.unlock();  //释放锁
    45             }
    46         }
    47         
    48     }
    49 }
  • 相关阅读:
    操作标签(转载)
    创建标签(转载)
    标签管理(转载)
    mysql第四篇--SQL逻辑查询语句执行顺序
    mysql第四篇:数据操作
    mysql第四篇:数据操作之单表查询
    mysql第三篇:表操作
    MySQL系列
    Mysql 第二篇:库操作
    Mysql 第一篇:初识数据库
  • 原文地址:https://www.cnblogs.com/ccfdod/p/6396024.html
Copyright © 2020-2023  润新知