1 package bytezero.deadlock;
2
3 /**
4 * 演示线程的死锁问题:
5 *
6 * 1.死锁的理解:不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃
7 * 自己需要的同步资源,就形成了线程的死锁
8 *
9 * 2.说明:出现死锁后,不会出现异常,不会出现提示,只是所有的线程的都处于阻塞的状态,
10 * 无法继续
11 * 我们使用同步时,要避免出现死锁。
12 *
13 * 解决方法:
14 * 专门的算法,原则
15 * 尽量减少同步资源的定义
16 * 尽量避免嵌套的同步
17 *
18 *
19 * @author Bytezero1·zhenglei! Email:420498246@qq.com
20 * create 2021-10-18 10:39
21 */
22 public class ThreadTest {
23 public static void main(String[] args) {
24
25 StringBuffer s1 = new StringBuffer();
26 StringBuffer s2 = new StringBuffer();
27
28 new Thread(){
29 @Override
30 public void run() {
31 synchronized (s1){
32
33 s1.append("a");
34 s2.append("1");
35
36 try {
37 Thread.sleep(100);
38 } catch (InterruptedException e) {
39 e.printStackTrace();
40 }
41
42 synchronized(s2){
43 s1.append("b");
44 s2.append("2");
45
46 System.out.println(s1);
47 System.out.println(s2);
48 }
49 }
50 }
51 }.start();
52
53 new Thread(new Runnable() {
54 @Override
55 public void run() {
56 synchronized (s2){
57 s1.append("c");
58 s2.append("3");
59
60 try {
61 Thread.sleep(100);
62 } catch (InterruptedException e) {
63 e.printStackTrace();
64 }
65
66 synchronized(s1){
67 s1.append("d");
68 s2.append("4");
69
70 System.out.println(s1);
71 System.out.println(s2);
72 }
73 }
74 }
75 }).start();
76 }
77 }

Java 演示线程的死锁问题的更多相关文章

  1. Java多线程——线程的死锁

    Java多线程——线程的死锁 摘要:本文主要介绍了Java多线程中遇到的死锁问题. 部分内容来自以下博客: https://www.cnblogs.com/wy697495/p/9757982.htm ...

  2. Java如何使用线程解决死锁?

    在Java编程中,如何使用线程解决死锁? 以下示例演示如何使用线程的概念解决死锁问题. // from W w w .Y I I b AI.c o M package com.yiibai; impo ...

  3. Java之线程,常用方法,线程同步,死锁

    1, 线程的概念 进程与线程 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据 ...

  4. java中线程安全,线程死锁,线程通信快速入门

    一:多线程安全问题 ###1 引入 /* * 多线程并发访问同一个数据资源 * 3个线程,对一个票资源,出售 */ public class ThreadDemo { public static vo ...

  5. Java线程的死锁和活锁

    目录 1.概览 2.死锁 2.1.什么是死锁 2.2 死锁举例 2.3 避免死锁 3.活锁 3.1 什么是活锁 3.2 活锁举例 3.3 避免活锁 1.概览 当多线程帮助我们提高应用性能的同时,它同时 ...

  6. Java多线程7:死锁

    前言 死锁单独写一篇文章是因为这是一个很严重的.必须要引起重视的问题.这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只 ...

  7. Java中线程总结

    本文简要介绍在 Java 世界中, 线程相关知识.主要包含 线程的创建与销毁:线程安全与同步:线程通讯:注意本文没有什么高深新知识,只缘起前段时间在翻看项目代码的时候,发现有些同学对此有诸多误解,故在 ...

  8. java thread 线程40个问题汇总

    http://www.codeceo.com/article/40-java-thread-problems.html 1.多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了, ...

  9. Java的线程和多线程教程

    Java线程(Java Thread)是执行某些任务的一种轻量级进程.Java中的Thread类提供了多线程(multi-threading)功能,应用程序能够创建多个线程并同一时候执行. 在一个应用 ...

  10. java多线程13 : 死锁

    前言 死锁单独写一篇文章是因为这是一个很严重的.必须要引起重视的问题.这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只 ...

随机推荐

  1. TienChin 活动管理-设置活动的默认状态

    // 设置活动未过期,相当于新增的活动,默认都是未过期的 activity.setActivityStatus(1);

  2. 深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM)、TimeSformer无卷积视频分类方法、注意力机制

    深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM).TimeSformer无卷积视频分类方法.注意力机制 1.时间偏移模块(TSM) 视频流的爆炸性增长为以高精度和低成本执行视频理解任 ...

  3. 东吴名贤传<一>骆统传

    骆俊,字孝远,会稽郡乌伤县人(今义乌市),少有才干,察孝廉,补尚书郎,擢拜陈相,为东汉末年陈王刘宠的国相,时袁术僭号,兄弟忿争,天下鼎沸,群贼并起,陈与比界,奸慝四布,俊厉威武,保疆境,贼不敢犯.养济 ...

  4. log4cxx配置日期回滚策略中增加MaxFileSize属性

    目录 1.背景 2.实现方式 2.1.DailyRollingFileAppender新增MaxFileSize属性 2.2.TimeBasedRollingPolicy策略新增maxFileSize ...

  5. C++编译器的RVO和NRVO

    1.说明 我一直记得返回对象的函数在调用时会有拷贝构造动作,但是最近实际测试却和记忆有些偏差,经查询是编译的问题 RVO: return value optimization NRVO: named ...

  6. Redis中的key的生存时间和过期时间

    目录 1.说明 2.指令 2.1.删除和更新 3.过期时间的保存 4.计算剩余生存时间 5.过期键的删除策略 5.1.定时删除 5.2.惰性删除 5.3.定期删除 1.说明 生存时间: (Time T ...

  7. 神经网络优化篇:将 Batch Norm 拟合进神经网络(Fitting Batch Norm into a neural network)

    将 Batch Norm 拟合进神经网络 假设有一个这样的神经网络,之前说过,可以认为每个单元负责计算两件事.第一,它先计算z,然后应用其到激活函数中再计算a,所以可以认为,每个圆圈代表着两步的计算过 ...

  8. Mygin之错误恢复Recover中间件

    本篇是mygin这个系列的最后一篇.如果想自己动手实现一个类似Gin的Web框架,建议从 mgin第一篇开始, 总代码行数有效行数只有600多行 github源码 mygin 目的 实现错误处理机制 ...

  9. Git Q&A

    git入门 Q: 什么是git ? A: git是一种版本控制工具,也是程序员的"后悔药":当你在工程中写入一堆混乱的代码后,只要通过几行简单的git命令,就可以回退到任意一个提交 ...

  10. 看New Bing回答世纪难题:女友和妈妈掉水里先救谁

    1.女友和妈妈掉水里先救谁 今天好奇想看看New Bing怎么回答这种世纪难题 结果New Bing非常聪明,反手建议我不要直接回答这个问题,而是换个角度哄女朋友,带着点不甘心,我继续追问它 New ...