史上超级无敌多线程死锁
2015-09-11 23:23
453 查看
* synchronized:并不是往对象里面枷锁,锁是每个对象都有的属性,synchronized只是锁上了这把锁,是个持续的动作而已
* 死锁就是大家都访问不了的状态
*
* 两个线程,
* 两个线程先后访问两个互斥的对象
*
* 原理:
* 1某个线程执行完成,需要 先后 嵌套 锁定 执行两个对象,但是,过程当中,肯定就锁定了第一个对象
* 2 另外一个线程执行完成,也需要先后嵌套锁定执行两个对象,先执行锁定第二个对像
* 3 在第一个执行过程中,执行到第二个对象时,发现被锁定了,等待
* 4 第二个线程执行过程中,执行到第一个对象的时候,发现第一个被锁死了,也只能等待.
public class Thread DeadLock{
public static void main(String[] args){
Object o1 = new Object();
Object o2 = new Object();
Thread t1 = new Thread(new A(o1,o2));
Thread t2 = new Thread(new B(o1,o2));
t1.start();
t2.start();
}
}
class A implements Runnable{
Object o1;
Object o2;
T1(Object o1, Object o2){
this.o1 = o1;
this.o2 = o2;
}
public void run(){
synchronized(o1){
try{
Thread.sleep(1000);
}catch(Exception e){
e.printStackTrace();
}
synchronized(o2){
System.out.println( "t1" );
}
}
}
}
class B implements Runnable{
Object o1;
Object o2;
T2(Object o1, Object o2){
this.o1 = o1;
this.o2 = o2;
}
public void run(){
synchronized(o2){
try{
Thread.sleep(1000);
}catch(Exception e){
e.printStackTrace();
}
synchronized(o1){
System.out.println( "t2" );
}
}
}
}
* 死锁就是大家都访问不了的状态
*
* 两个线程,
* 两个线程先后访问两个互斥的对象
*
* 原理:
* 1某个线程执行完成,需要 先后 嵌套 锁定 执行两个对象,但是,过程当中,肯定就锁定了第一个对象
* 2 另外一个线程执行完成,也需要先后嵌套锁定执行两个对象,先执行锁定第二个对像
* 3 在第一个执行过程中,执行到第二个对象时,发现被锁定了,等待
* 4 第二个线程执行过程中,执行到第一个对象的时候,发现第一个被锁死了,也只能等待.
public class Thread DeadLock{
public static void main(String[] args){
Object o1 = new Object();
Object o2 = new Object();
Thread t1 = new Thread(new A(o1,o2));
Thread t2 = new Thread(new B(o1,o2));
t1.start();
t2.start();
}
}
class A implements Runnable{
Object o1;
Object o2;
T1(Object o1, Object o2){
this.o1 = o1;
this.o2 = o2;
}
public void run(){
synchronized(o1){
try{
Thread.sleep(1000);
}catch(Exception e){
e.printStackTrace();
}
synchronized(o2){
System.out.println( "t1" );
}
}
}
}
class B implements Runnable{
Object o1;
Object o2;
T2(Object o1, Object o2){
this.o1 = o1;
this.o2 = o2;
}
public void run(){
synchronized(o2){
try{
Thread.sleep(1000);
}catch(Exception e){
e.printStackTrace();
}
synchronized(o1){
System.out.println( "t2" );
}
}
}
}
相关文章推荐
- Android 学习第13课,android 实现发送短信的功能
- Week1-4Qucik-Union Improvments
- ECSHOP小记
- 百度API集市与图灵机器人
- 10大互联网危机公关事件:什么才是解围的正确姿势?
- 张祖勋:摄影测量的信息化与智能化
- 手机浏览器调试建议
- UEditor+七牛,实现图片直连上传
- Unknown type name "CGRect",did you mean "Rect"?的解决方案
- Python连接MySQL
- 下载安装oracle11g
- 基于色域Rgb通道的MATLAB图像选择
- 8086CPU
- 腾讯社招面试经历
- c语言中对于文件操作的一些学习
- iOS _UIViewController _loadViewFromNibNamed:bundle 错误问题
- Can t connect to MySQL server on 解决方法
- ADF:如何实现字段值的转换,并设置内容颜色
- wrong code
- 数据库 之 入门篇