java5开始可以显示定义同步锁对象来实现同步,这种机制下,同步锁由对象充当
Lock比同步代码块和同步方法更加灵活
在实现线程安全的机制中,比较常用的是ReentrantLock(可重入锁)。使用该Lock对象可以显示的加锁,释放锁

ReentrantLock 代码格式如下:

class X{//定义锁对象private final ReentrantLock lock = new ReentrantLock();//...//定义需要保证线程安全的方法public void method() {//加锁
        lock.lock();try {//需要保证线程安全的代码
        }finally {//使用finally来保证释放锁
            lock.unlock();}}
}

public class Account {private String account;//账号private double balance;//余额//定义锁对象private final ReentrantLock lock = new ReentrantLock();public Account() {super();}public Account(String account, double balance) {super();this.account = account;this.balance = balance;}public void drawMoney(double drawMoney) {//加锁
        lock.lock();try {if(balance >= drawMoney) {System.out.println(Thread.currentThread().getName() + "取钱成功!吐出钞票:" + drawMoney);try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}balance -= drawMoney;System.out.println("\t余额为:" + balance);}else {System.out.println(Thread.currentThread().getName() + "取钱失败!余额不足");}}finally {//放锁
            lock.unlock();}}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public double getBalance() {return balance;}public void setBalance(double balance) {this.balance = balance;}
}

public class DrawThread extends Thread{private Account account;//模拟账户private double drawMoney;//当前取钱线程想要取的钱数public DrawThread(String name , Account account, double drawMoney) {super(name);this.account = account;this.drawMoney = drawMoney;}public void run() {account.drawMoney(drawMoney);}public static void main(String[] args) {Account account = new Account("123456" , 1000);new DrawThread("A", account, 800).start();new DrawThread("B", account, 800).start();}
}

转载于:https://www.cnblogs.com/Uzai/p/9675717.html

java 多线程 6 : 同步锁(Lock)相关推荐

  1. Android多线程之同步锁的使用

    本文主要介绍了Android多线程之同步锁的使用,分享给大家,具体如下: 一.同步机制关键字synchronized 对于Java来说,最常用的同步机制就是synchronized关键字,他是一种基于 ...

  2. Java多线程系列---“JUC锁”01之 框架

    本章,我们介绍锁的架构:后面的章节将会对它们逐个进行分析介绍.目录如下: 01. Java多线程系列--"JUC锁"01之 框架 02. Java多线程系列--"JUC锁 ...

  3. Java多线程系列--“JUC锁”03之 公平锁(一)

    概要 本章对"公平锁"的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括: 基本概念 ReentrantLock数据结构 参考代码 获取公平锁(基于JDK1.7.0 ...

  4. Java多线程系列--“JUC锁”05之 非公平锁

    转载自:http://www.cnblogs.com/skywang12345/p/3496651.html点击打开链接 概要 前面两章分析了"公平锁的获取和释放机制",这一章开始 ...

  5. 同步锁Lock的使用

    2019独角兽企业重金招聘Python工程师标准>>> //数据同步锁保证数据的同步操作  private static Lock lock=new ReentrantLock(); ...

  6. java实验多线程机制_使用Java多线程的同步机制编写应用程序 PDF 下载

    使用Java多线程的同步机制编写应用程序 PDF 下载 本站整理下载: 相关截图: 主要内容: 一. 实验名称 使用Java多线程的同步机制编写应用程序 二. 实验目的及要求 1.理解并行/并发的概念 ...

  7. Java 多线程 不使用锁机制 实现交替打印数字和字母

    Java 多线程 不使用锁机制 实现交替打印数字和字母 这是一道经典的面试题,使用两个线程去交替打印数字和字母,输出1A2B3C4D5E6F7G-这样的效果,看了网上很多的文章,基本都是使用Condi ...

  8. java 同步方式 lock_Java的同步锁(Lock)

    从Java 5开始,Java提供了一种功能更强大的线程同步机制一-通过 显式定义同步锁对象来实现同步,在这种机制下,同步锁由Lock对象充当.Lock提供了比synchronized方法和synchr ...

  9. Java同步锁——lock与synchronized 的区别【转】

    在网上看来很多关于同步锁的博文,记录下来方便以后阅读 一.Lock和synchronized有以下几点不同: 1)Lock是一个接口,而synchronized是Java中的关键字,synchroni ...

  10. Java基础知识多线程,同步锁

    多线程 /*多线程: 多任务执行,多路径执行优点:提高性能提高效率进程与线程之间的区别:进程 : 系统中的程序,一个进程之间可以包含1~n个线程,系统中资源分配的最小单位,每个进程都有自己的代码与数据 ...

最新文章

  1. Nginx最新版安装教程(Windows+Linux)
  2. zz Expect的安装
  3. 3.9 训练一个 Softmax 分类器-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  4. 写博客一周我有哪些收获
  5. 如何高效学习Java?本文给你一些建议!
  6. Visio中如何绘制黑白图像
  7. 手把手教你从零开始搭建个人博客,20分钟上手
  8. 西安计算机技校专业,西安计算机软件工程学校哪里好|西安铁道技师学院计算机软件工程专业|西安计算机学校怎么样?|西安中专学校...
  9. unity中程序的延时
  10. html推箱子过关检测函数,HTML5推箱子实现
  11. Jzoj3780 Magical GCD
  12. 面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
  13. 使用mysql语句进行多表联查(以三个表为例)
  14. kali Linux的简单介绍
  15. mysql:mysql数据库下载及安装(详细)
  16. IDEA中对Git的常规操作(合并,提交,新建分支,更新)
  17. Java1==Java2?Java1:Java2问题
  18. 转:vim的复制粘贴小结
  19. Django项目后端实现注册功能---短信验证码(容联云)。
  20. 医疗检测机构能力建设指导原则

热门文章

  1. [渝粤教育] 郑州财税金融职业学院 玩转e时代 参考 资料
  2. 【渝粤教育】国家开放大学2018年春季 8636-21T实用心理学 参考试题
  3. 2012北理机试题——已知中序和后序遍历序列,求先序
  4. 计算机视觉实战(十)图像特征harris角点检测(附完整代码)
  5. 关于平方根倒数速算法(雷神之锤3,牛B)
  6. 关于最近打断点的总结
  7. 【Android命令行】jarsigner参数详解
  8. [转]体验:VC++ .NET 2003 –安装和使用STLport 4.5.3 和LokiPort
  9. 学习shell script
  10. C# DataTable.Select() 筛选数据