Java 演示线程的死锁问题
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 演示线程的死锁问题的更多相关文章
- Java多线程——线程的死锁
Java多线程——线程的死锁 摘要:本文主要介绍了Java多线程中遇到的死锁问题. 部分内容来自以下博客: https://www.cnblogs.com/wy697495/p/9757982.htm ...
- Java如何使用线程解决死锁?
在Java编程中,如何使用线程解决死锁? 以下示例演示如何使用线程的概念解决死锁问题. // from W w w .Y I I b AI.c o M package com.yiibai; impo ...
- Java之线程,常用方法,线程同步,死锁
1, 线程的概念 进程与线程 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据 ...
- java中线程安全,线程死锁,线程通信快速入门
一:多线程安全问题 ###1 引入 /* * 多线程并发访问同一个数据资源 * 3个线程,对一个票资源,出售 */ public class ThreadDemo { public static vo ...
- Java线程的死锁和活锁
目录 1.概览 2.死锁 2.1.什么是死锁 2.2 死锁举例 2.3 避免死锁 3.活锁 3.1 什么是活锁 3.2 活锁举例 3.3 避免活锁 1.概览 当多线程帮助我们提高应用性能的同时,它同时 ...
- Java多线程7:死锁
前言 死锁单独写一篇文章是因为这是一个很严重的.必须要引起重视的问题.这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只 ...
- Java中线程总结
本文简要介绍在 Java 世界中, 线程相关知识.主要包含 线程的创建与销毁:线程安全与同步:线程通讯:注意本文没有什么高深新知识,只缘起前段时间在翻看项目代码的时候,发现有些同学对此有诸多误解,故在 ...
- java thread 线程40个问题汇总
http://www.codeceo.com/article/40-java-thread-problems.html 1.多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了, ...
- Java的线程和多线程教程
Java线程(Java Thread)是执行某些任务的一种轻量级进程.Java中的Thread类提供了多线程(multi-threading)功能,应用程序能够创建多个线程并同一时候执行. 在一个应用 ...
- java多线程13 : 死锁
前言 死锁单独写一篇文章是因为这是一个很严重的.必须要引起重视的问题.这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只 ...
随机推荐
- 微信小程序-组件生命周期方法
官方文档:https://developers.weixin.qq.com/miniprogram/dev/reference/api/Component.html 正如官方显示组件的生命周期中常用的 ...
- 全新Self-RAG框架亮相,自适应检索增强助力超越ChatGPT与Llama2,提升事实性与引用准确性
全新Self-RAG框架亮相,自适应检索增强助力超越ChatGPT与Llama2,提升事实性与引用准确性 1. 基本思想 大型语言模型(LLMs)具有出色的能力,但由于完全依赖其内部的参数化知识,它们 ...
- Python自动化办公--Pandas玩转Excel数据分析【二】
相关文章: Python自动化办公--Pandas玩转Excel[一] Python自动化办公--Pandas玩转Excel数据分析[三] python处理Excel实现自动化办公教学(含实战)[一] ...
- 使用.NET Core实现不同服务器SQL Server 数据库同步方案
代码片段: 1 using DataSync.Core; 2 using Furion.Logging.Extensions; 3 using Microsoft.Data.SqlClient; 4 ...
- QQ音乐转 mp3 格式的链接,不需要下载任何软件
一.打开QQ音乐的官网 QQ音乐-千万正版音乐海量无损曲库新歌热歌天天畅听的高品质音乐平台! 二.随便找一首歌播放 三.打开后,就可以使用了
- PHP操作数据分页
PHP操作数据分页 一.数据库安全 string addslashes ( string $str ) 返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线.这些字符是单引号('). ...
- Oracle 数据库锁表问题及相关解决方法
Oracle 数据库锁表问题及相关解决方法 问题描述: 今天在公司运行服务的时候,需要查询300多万的数据,再进行排序之后放到kafka的消息队列中,供flink进行消费.在服务器上直接运行后,服务报 ...
- (python)学习ing||类学习,@property装饰器
class pers(): def __init__(self,hp): self._hp=hp @property def hp(self): return self._hp @hp.setter ...
- DBGRIDEH 排序 我自己大总结【含DBX,Dac控件】
1.三个属性让DBGridEH可以点击表头自动排序 只要设置下面三个属性: ColumDefValues->Title->TitleButton设为TRUE sortlocal 设为 ...
- Linux-find命令报错: missing argument to `-exec'
报错提示:find: missing argument to `-exec' 今天写一个清理脚本,用到了find命令.本来是这么写的: find . -type f -mtime +7 -name & ...