SummerVocation_Learning--java的线程死锁
public class Test_DeadLock implements Runnable {
public int flag = ;
static Object o1 = new Object(),o2 = new Object();
public void run() {
System.out.println("flag= " + flag);
if (flag == ) {
synchronized (o1) { //o1锁定
try {
Thread.sleep();
} catch (Exception e) {
e.printStackTrace();
}
synchronized (o2) { //只要再锁定o2,就能打印出1.
System.out.println(""); //但是o2被另一个线程锁定了,所以打印不出1.
}
}
}
if (flag == ) {
synchronized (o2) { //锁定o2
try {
Thread.sleep();
} catch (Exception e) {
e.printStackTrace();
}
synchronized (o1) { //只要再等待锁定o1,就能打印出0.
System.out.println(""); //但是o1另一个线程锁定,无法执行。两个线程被锁死,谁都无法完成执行。
}
}
}
}
public static void main(String[] args) {
Test_DeadLock t1 = new Test_DeadLock();
Test_DeadLock t2 = new Test_DeadLock();
t1.flag = ;
t2.flag = ;
Thread t11 = new Thread(t1);
Thread t21 = new Thread(t2);
t11.start(); t21.start();
}
/*
* flag= 1
flag= 0
两个线程产生死锁,synchronized的输出语句未被执行。
*/
}
SummerVocation_Learning--java的线程死锁的更多相关文章
- java 查看线程死锁
那我们怎么确定一定是死锁呢?有两种方法. 1>使用JDK给我们的的工具JConsole,可以通过打开cmd然后输入jconsole打开. 1)连接到需要查看的进程.
- Java多线程:线程死锁
发生死锁的原因通常是两个对象的锁相互等待造成的. 以下用一个实例来构造这样的情况: package basic.e_deadlock; import org.apache.log4j.Logger; ...
- [改善Java代码]预防线程死锁
线程死锁DeadLock是多线程编码中最头疼的问题,也是最难重现的问题,因为Java是单进程多线程语言.
- Java之线程,常用方法,线程同步,死锁
1, 线程的概念 进程与线程 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据 ...
- Java——线程死锁问题
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- Java线程死锁查看分析方法
如何查看是否有Java线程死锁?下面介绍两种方法. 一.Jconsole Jconsole是JDK自带的图形化界面工具,使用JDK给我们的的工具JConsole,可以通过打开cmd然后输 ...
- Atitit.线程 死锁 跑飞 的检测与自动解除 与手动解除死锁 java c# .net php javascript.
Atitit.线程 死锁 跑飞 的检测与自动解除 与手动解除死锁 java c# .net php javascript. 1. 现象::主程序卡住无反应,多行任务不往下执行 1 2. 原因::使用j ...
- java多线程之 ---- 线程死锁
java多线程之线程死锁 产生死锁的主要原因: 由于系统资源不足. 进程执行推进的顺序不合适. 资源分配不当等. 假设系统资源充足.进程的资源请求都可以得到满足,死锁出现的可能性就非常低.否则就会因争 ...
- Java多线程——线程的死锁
Java多线程——线程的死锁 摘要:本文主要介绍了Java多线程中遇到的死锁问题. 部分内容来自以下博客: https://www.cnblogs.com/wy697495/p/9757982.htm ...
- java 线程死锁的检测
java 线程死锁的检测 例子程序: import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executo ...
随机推荐
- centos7网卡名称修改以及配置
1.vi /etc/sysconfig/network-scripts/ifcfg-enoxxxxxx 为ifcfg-eth0并 将里面的NAME项修改为eth0 2.禁用该可预测命名规则.在启动时传 ...
- 默认约束 default
default :初始值设置,插入记录时,如果没有明确为字段赋值,则自动赋予默认值. 例子:create table tb6( id int primary key auto_increment ...
- Angular学习笔记 ——input 标签上的【name属性】和【ngModelOptions属性】
利用“@angular/forms" 创建<form>表单的时候,系统默认会创建一个”FormGroup"的对象. 使用带有“ngModel"的”<in ...
- 1101 Quick Sort(25 分
There is a classical process named partition in the famous quick sort algorithm. In this process we ...
- testlink迁移
前置配置:安装mysql-5.5.13-win32版数据库(速度快点),设置root密码为123465(mysql5.5数据库端口号不要与redmine的mysql冲突) 1.安装testlink(版 ...
- mac终端快捷键
mac终端快捷键: http://www.jianshu.com/p/e6c364084c22
- SQL2008无法启动,报错"17051"解决方法
SQL2008无法启动,这是错误日志: C:/Program Files/Microsoft SQL Server/MSSQL10_50.MSSQLSERVER/MSSQL/Log 2011-06-0 ...
- 一个简单的CI分页类
[php] view plaincopy <span style="font-size:16px;">/** * * 关于 页码有效性的判断需要加在 控制器中判断,即当 ...
- python之re模块和正则表达式
今天我们来谈谈python中模块的使用,在探讨模块前先来了解一下正则表达式的具体用法. 1.正则表达式 正则表达式就是匹配 字符串内容的一种规则.谈到正则就和字符串相关了,首先我们要知道什么是字符组. ...
- 【Linux/Ubuntu学习 10】unbuntu 下 eclipse 中文乱码的解决
wangdd@wdd-pc:~$ gedit /var/lib/locales/supported.d/local 添加: zh_CN.GBK GBK zh_CN.GB2312 GB2312 终端执行 ...