class Obj{
static Object obj1=new Object();
static Object obj2=new Object();
}
class Sisuo implements Runnable{
boolean flag=true;
public Sisuo(boolean flag){
this.flag=flag;
}
public void run(){
if(flag)
synchronized (Obj.obj1) {//死锁造成的原因是不是因为,一个synchronized拿着obj1变量,另一个synchronized拿着另一个拿着 obj2,这两个都想要对方的变量,可是变量已经在使用,
System.out.println("obj1----if");
synchronized (Obj.obj2) {
try {
Thread.sleep(10);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println("obj2----if");
}
}
else
synchronized (Obj.obj2) {
System.out.println("obj2----else");
synchronized (Obj.obj1) {
try {
Thread.sleep(10);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println("obj1----else");
}
}
}
}
class Test{
public static void main(String[] args){
//Sisuo xiaosi=new Sisuo();
Thread t1=new Thread(new Sisuo(true));
Thread t2=new Thread(new Sisuo(false));
t1.start();
//Sisuo.flag=false;
t2.start();
}
}死锁造成的原因是不是因为,一个synchronized拿着obj1变量,另一个synchronized拿着另一个拿着 obj2,这两个都想要对方的变量,可是对方变量已经在使用,导致另一个线程无法操作?。关键在于变量已经使用?
线程
static Object obj1=new Object();
static Object obj2=new Object();
}
class Sisuo implements Runnable{
boolean flag=true;
public Sisuo(boolean flag){
this.flag=flag;
}
public void run(){
if(flag)
synchronized (Obj.obj1) {//死锁造成的原因是不是因为,一个synchronized拿着obj1变量,另一个synchronized拿着另一个拿着 obj2,这两个都想要对方的变量,可是变量已经在使用,
System.out.println("obj1----if");
synchronized (Obj.obj2) {
try {
Thread.sleep(10);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println("obj2----if");
}
}
else
synchronized (Obj.obj2) {
System.out.println("obj2----else");
synchronized (Obj.obj1) {
try {
Thread.sleep(10);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println("obj1----else");
}
}
}
}
class Test{
public static void main(String[] args){
//Sisuo xiaosi=new Sisuo();
Thread t1=new Thread(new Sisuo(true));
Thread t2=new Thread(new Sisuo(false));
t1.start();
//Sisuo.flag=false;
t2.start();
}
}死锁造成的原因是不是因为,一个synchronized拿着obj1变量,另一个synchronized拿着另一个拿着 obj2,这两个都想要对方的变量,可是对方变量已经在使用,导致另一个线程无法操作?。关键在于变量已经使用?
线程
解决方案 »
- Java Swing中pack(),dispose(),repaint()之间的区别?
- 37373737/7171717171=?用最简便的方法算出来
- 求下载地址 @.@
- 如何将html直接转换为图片?
- 关于多态的问题 ,帮我解决拉,,谢谢拉
- 有关rsa的privateKey问题,已经调了2天了
- 将文件转成把bat文件的工具叫什么名字?
- 简单问题,画的字为什麽不显示
- jFileChooser只能选定文件,怎样才能选定一个文件夹?用什么类?
- 以前没用jbuilder,现在用感觉很好;编写时代码自动完成得快捷键是什么,请知道的朋友给一下!
- NIO selector 向指定channel发送信息
- Comparator比较器的实现
等待的东西,别人正在使用。你不得到,就不能将手中的物品释放。对面和你出现同样的情况。AB BA 都可以完成任务。 A---->need BB---->need A死锁了。