模拟死锁

package com.gjjun.concurrent;/*** 模拟死锁,来源于《Java并发编程的艺术》* @Author gjjun* @Create 2018/8/12**/
public class DeadLockDemo {private static String A = "A";private static String B = "B";public static void main(String[] args) {DeadLockDemo deadLockDemo = new DeadLockDemo();deadLockDemo.deadLock();}/*** 下面代码将发生死锁,原因是线程0将A资源锁定,之后线程1将B资源锁定,* 之后线程1调用A资源,但是是锁定状态,所以等待A资源释放,但是A资源在2s后需要B* 资源,但是B资源却等待A资源释放,所以形成了相互依赖。** 可以在控制行输入命令 jps,查看类的id,之后使用jstack id查看是否发生了死锁*** 避免死锁的方式:* 1.避免一个线程同时获取多个锁。* 2.避免一个线程同时占用多个资源,尽量保证一个锁一个资源。* 3.尝试使用定时锁,使用lock.tryLock(timeout)来代替使用* 4.对于数据库锁,加锁和解锁必须在一个数据库连接池里。*/private void deadLock() {Thread thread1 = new Thread(new Runnable() {@Overridepublic void run() {synchronized (A) {try {System.out.println("A");Thread.currentThread();Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (B) {System.out.println("1");}}}});Thread thread2 = new Thread(new Runnable() {@Overridepublic void run() {synchronized (B) {try {System.out.println("B");Thread.currentThread();Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (A) {System.out.println("2");}}}});thread1.start();thread2.start();}
}

下面是使用jstack命令查看的死锁状态,红色框内是死锁发生的类文件及行号。

转载于:https://www.cnblogs.com/liter7/p/9463072.html

Java并发编程的艺术 记录(一)相关推荐

  1. Java并发编程的艺术 记录(三)

    Java内存模型 并发编程的两个关键问题: 1.线程之间如何通讯. 2.线程间如何同步. 两种方式:共享内存和消息传递. Java的并发采用的是共享内存模型,Java线程之间的通信总是隐式进行,整个通 ...

  2. 《Java并发编程的艺术》笔记

    <Java并发编程的艺术>笔记 第1章 并发编程的挑战 1.1 上下文切换 CPU通过时间片分配算法来循环执行任务,任务从保存到再加载的过程就是一次上下文切换. 减少上下文切换的方法有4种 ...

  3. 《Java并发编程的艺术》——线程(笔记)

    文章目录 四.Java并发编程基础 4.1 线程简介 4.1.1 什么是线程 4.1.2 为什么要使用多线程 4.1.3 线程优先级 4.1.4 线程的状态 4.1.5 Daemon线程 4.2 启动 ...

  4. Java并发编程的艺术(推荐指数:☆☆☆☆☆☆)

    文章目录 Java并发编程的艺术(推荐指数:☆☆☆☆☆☆) 并发编程的挑战 Java并发机制的底层实现原理 Volatile的应用 实现原理 synchronized的实现原理与应用 对象头 锁详解 ...

  5. 《Java并发编程的艺术》——Java并发的前置知识(笔记)

    文章目录 一.并发编程的挑战 1.1 上下文切换 1.1.1 多线程一定快吗 1.1.2 如何减少上下文的切换 1.2 死锁 死锁发生的条件 预防死锁 避免死锁 1.3 资源限制的挑战 1.3.1 什 ...

  6. Java并发编程的艺术_Conc

    Java并发编程的艺术 1 并发编程的挑战 1.1 上下文切换 即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制.时间片是CPU分配给各个线程的时间,因为时间片 ...

  7. Java并发编程的艺术,解读并发编程的优缺点

    并发编程的优缺点 使用并发的原因 多核的CPU的背景下,催生了并发编程的趋势,通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升. 在特殊的业务场景下先天的就适合于并发编程. 比如在 ...

  8. 《Java 并发编程的艺术》迷你书

    本文源自InfoQ发表的<Java 并发编程的艺术>电子书  作者:方腾飞  序言:张龙 免费下载此迷你书 推荐序 欣闻腾飞兄弟的<聊聊并发>系列文章将要集结成InfoQ迷你书 ...

  9. 【推荐】《Java 并发编程的艺术》迷你书

    本文源自InfoQ发表的<Java 并发编程的艺术>电子书  作者:方腾飞  序言:张龙 免费下载此迷你书 推荐序 欣闻腾飞兄弟的<聊聊并发>系列文章将要集结成InfoQ迷你书 ...

最新文章

  1. Arm收购进展、元宇宙、GPU涨价……听听黄仁勋怎么说
  2. SWT 和 SWING
  3. 基于LM567制作的反射式红外检测电路,用于节能信标检测电路
  4. 【收藏】运维必备的问题定位工具及案例分析
  5. Django里自定义用户登陆及登陆后跳转到登陆前页面的实现
  6. 【转】CentOs中Apache开启rewrite模块详解
  7. 华为鸿蒙将比安卓快,任正非透露华为鸿蒙系统:将比安卓速度快60%
  8. AI Challenger全球AI挑战赛开幕,300万奖金池,还可能获李开复投资
  9. Centos7安装NVIDIA的驱动的坑
  10. es6 模板字变量和字符串占位符
  11. [2018.07.10 T3]数论题
  12. a链接下载文件时,会打开新页面然后下载
  13. 蓝天学校计算机教学反思,小学四年级上册《飞向蓝天的恐龙》教学反思
  14. 硬核:解决github release下载慢的问题(含github下载提速方法)
  15. Swift获取当前网络状态Wifi/5G/4G/3G/2G
  16. python在cmd中打印彩色文字
  17. forward_list
  18. 程序猿理论系列整理:高级语言、汇编语言、机器语言
  19. 三、多元线性回归模型(计量经济学学习笔记)
  20. 输入一段字符,统计一段字符串中大小写字母的个数

热门文章

  1. BZOJ3527: [Zjoi2014]力
  2. Ubuntu14-04安装redis和php5-redis扩展
  3. 【OpenCV开发】使用OpenCV的OpenCL(ocl)模块
  4. Python之路_Day13
  5. C++中的类所占内存空间总结
  6. 判断字符串的长度,中文占两个字符
  7. Console.WriteLine在以Windows Application方式下编译会产生性能问题
  8. LINUX操作系统手机刷机包制作、修改方法
  9. 11.10 chkconfig:管理开机服务
  10. s6-1 传输层概述