zoukankan      html  css  js  c++  java
  • 同步锁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 }
  • 相关阅读:
    CodeSmith功能和技巧收集
    简繁转换js兼容各种浏览器
    40 个轻量级 JavaScript 库
    AJAX处理Session
    对项目管理的几点认识(转)
    extjs
    数据采集需要的方法
    JavaScript 浮动定位提示效果
    一个类别表设计
    ExtJS 源码剖析 —— Ext类
  • 原文地址:https://www.cnblogs.com/ccfdod/p/6396024.html
Copyright © 2011-2022 走看看