博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
同步锁Lock
阅读量:4599 次
发布时间:2019-06-09

本文共 1544 字,大约阅读时间需要 5 分钟。

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

  • 同步代码块(隐式锁,基于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):隐式锁,基于jvm10  * 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     @Override31     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 }

 

转载于:https://www.cnblogs.com/ccfdod/p/6396024.html

你可能感兴趣的文章
(文件过多时)删除目录下全部文件
查看>>
T-SQL函数总结
查看>>
python 序列:列表
查看>>
web移动端
查看>>
pythonchallenge闯关 第13题
查看>>
linux上很方便的上传下载文件工具rz和sz使用介绍
查看>>
React之特点及常见用法
查看>>
【WEB前端经验之谈】时间一年半,或沉淀、或从零开始。
查看>>
优云软件助阵GOPS·2017全球运维大会北京站
查看>>
linux 装mysql的方法和步骤
查看>>
poj3667(线段树区间合并&区间查询)
查看>>
51nod1241(连续上升子序列)
查看>>
SqlSerch 查找不到数据
查看>>
集合相关概念
查看>>
Memcache 统计分析!
查看>>
(Python第四天)字符串
查看>>
个人介绍
查看>>
使用python动态特性时,让pycharm自动补全
查看>>
MySQL数据库免安装版配置
查看>>
你必知必会的SQL面试题
查看>>