线程—代码模拟—死锁

[color=green][b]1、背景知识[/b][/color]


关于进程和线程的区别,总有人喜欢这样问。
这就像问 java中 final 、 finally 、finalize 的区别一样滑稽。(只是因为这3个关键字的开头都含有f、i、n、a、l这几个字母么?)

进程和线程是2种不同的程序运行的机制。2者实现的方式不同。基本上没有可比性。
用进程设计实现的程序,跑不了所谓的线程。即使有线程的概念,也和使用线程实现的程序中线程的概念相差甚远。2者根本不是一个东西。

如果要谈区别,说:进程设计理念 和 线程设计理念 有何区别。我想还不多。不要钻进进程里谈进程和线程,也不要钻进线程里谈进程和线程。

java虚拟机是线程实现的。


[color=green][b]2、死锁[/b][/color]

在一个线程中,需要锁定2个及以上对象,但是需要去锁定的对象,被别的线程锁定,而别的线程依赖当前线程已锁定的对象。

TestDeadLock.java
[code]
public class TestDeadLock implements Runnable{
public int flag =1;
static Object o1 = new Object();
static Object o2 = new Object();

public void run(){
System.out.println("flag=" +flag);
if(flag == 1){
synchronized(o1){
try{
Thread.sleep(500);
}catch(Exception e){
e.printStackTrace();
}
synchronized(o2){
System.out.println("1");
}
}
}
if(flag == 0){
synchronized(o2){
try{
Thread.sleep(500);
}catch(Exception e){
e.printStackTrace();
}
synchronized(o1){
System.out.println("0");
}
}
}
}
public static void main(String[] args){
TestDeadLock td1 = new TestDeadLock();
TestDeadLock td2 = new TestDeadLock();
td1.flag = 1;
td2.flag = 0;
Thread t1 = new Thread(td1);
Thread t2 = new Thread(td2);
t1.start();
t2.start();
}
}

[/code]


-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值