Java——线程死锁问题
body, table{font-family: 微软雅黑; font-size: 10pt}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}
☞ 影响效率
☞ 如果出现了嵌套锁,容易产生死锁
☞ 死锁是指两个以上的线程在执行过程中,因为争夺资源而产生的一种相互等待的现象
| Main.java | MyLock.java |
|
package com.java.demo;
public class Main {
public static void main(String[] args) {
Object obj=new Object(); //这里的obj传到MyThread,这样两个线程共用同一个对象才能锁住
MyThread t1=new MyThread("中国人",obj);
MyThread t2=new MyThread("英国人",obj);
t1.start();
t2.start();
}
}
|
package com.java.demo;
public class MyLock {
static Object LockA=new Object();
static Object LockB=new Object();
}
|
| MyThread.java | |
|
package com.java.demo;
public class MyThread extends Thread{
//Object obj;
public void run(){
super.run();
//目的让线程死锁
if(getName().equals("中国人")){
synchronized(MyLock.LockA){ //这里换种方式 ,不用obj
System.out.println(getName()+"MyThread.run() 我得到了A锁,要继续执行的话需要B锁");
synchronized(MyLock.LockB){
System.out.println(getName()+"MyThread.run() 我得到了B锁");
System.out.println(getName()+"MyThread.run() 我两把锁都得到了,开始工作");
}
}
}
else if(getName().equals("英国人")){
synchronized(MyLock.LockB){
System.out.println(getName()+"MyThread.run() 我得到了B锁,要继续执行的话需要A锁");
synchronized(MyLock.LockA){
System.out.println(getName()+"MyThread.run() 我得到了A锁");
System.out.println(getName()+"MyThread.run() 我两把锁都得到了,开始工作");
}
}
}
}
public MyThread(String name,Object obj){
super(name);
//this.obj=obj;
}
}
|
Java——线程死锁问题的更多相关文章
- Java线程死锁查看分析方法
如何查看是否有Java线程死锁?下面介绍两种方法. 一.Jconsole Jconsole是JDK自带的图形化界面工具,使用JDK给我们的的工具JConsole,可以通过打开cmd然后输 ...
- java 线程死锁的检测
java 线程死锁的检测 例子程序: import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executo ...
- 55行代码实现Java线程死锁
死锁是Java多线程的重要概念之一,也经常出现在各大公司的笔试面试之中.那么如何创造出一个简单的死锁情况?请看代码: class Test implements Runnable { boolean ...
- 一个Java线程死锁的例子
package com.lk.B; public class Test4 { private static final Object o1 = new Object(); private static ...
- JAVA线程死锁
文件名:DeadThreadByExtend.java 注: 1.起线程的时候用的是start方法,run方法也可以调用,但是仅仅相当于普通调用,在当前线程内执行. 2.synchronized 不能 ...
- 诊断Java线程死锁
比如我们有运行这样一个程序: 了解多线程的小伙版都知道,这段代码不会有打印结果,因为发生了死锁.我们在服务器上运行试试,没有输出,对应的进程是 32752. 使用 “jstack 32752”排查,后 ...
- 【!Important】Java线程死锁查看分析方法
一.Jconsole Jconsole是JDK自带的图形化界面工具,使用JDK给我们提过的工具JConsole,可以通过cmd打开命令框然后输入Jconsole打开图形工具 然后点击检测死锁就可以查看 ...
- Java 多线程 死锁 隐性死锁 数据竞争 恶性数据竞争 错误解决深入分析 全方向举例
在几乎所有编程语言中,由于多线程引发的错误都有着难以再现的特点,程序的死锁或其它多线程错误可能只在某些特殊的情形下才出现,或在不同的VM上运行同一个程序时错误表现不同.因此,在编写多线程程序时,事先认 ...
- [改善Java代码]预防线程死锁
线程死锁DeadLock是多线程编码中最头疼的问题,也是最难重现的问题,因为Java是单进程多线程语言.
随机推荐
- ubuntu下转换flv格式为mp4格式
一.环境 ubuntu 16.04 二.安装工具 sudo apt install libav-tools 三.开始转换 avconv -i input.flv -codec copy output. ...
- 断开网络连接的dos命令
https://zhidao.baidu.com/question/154994771.html 或者采用服务关闭开启模式,不过没有上面的好用net stop "network connec ...
- C# Byte[] 数组操作
byte[] Strbyte = Encoding.GetEncoding("big5").GetBytes(str); if (Strbyte.Length ...
- 解决方案:c调用python,PyImport_Import或者PyImport_ImportModule总是返回为空
下面c_python_utils.h是处理工具函数,test.cpp是测试程序,hello.py是python类 可是当我集成到项目中的时候,PyImport_Import总是返回为空,起初我以为是i ...
- Python非递归遍历多叉树
class Queue: def __init__(self,max_size): self.max_size = int(max_size) self.queue = [] def put(self ...
- 111python
补充一句,为兼容平台文件地址可以这么写: file = os.path.join('dir', 'file_name')
- MVC ---- T4模板的小练习
1.先建立两个模板文件 :Manger.ttinclude.DBHelper.ttinclude Manger.ttinclude <#@ assembly name="System. ...
- [ios]NSThread传值 NSValue传值
NSThread:http://www.cocoachina.com/bbs/read.php?tid=51873 NSValue:http://blog.sina.com.cn/s/blog_bf9 ...
- jq 命名空间
$('ul').on("click",function(){console.log('all');});$('ul').on("click.a",functio ...
- 【Golang 接口自动化04】 解析接口返回JSON串
前言 上一次我们一起学习了如何解析接口返回的XML数据,这一次我们一起来学习JSON的解析方法. JSON(Javascript Object Notation)是一种轻量级的数据交换语言,以文字为基 ...