您的位置:首页 > 编程语言 > Java开发

java多线程的同步和死锁

2016-04-01 16:03 330 查看
同步

public class SynchronizeThread extends Thread {
private int number;
private Object obj;

public SynchronizeThread(int number, Object obj) {
this.number = number;
this.obj = obj;
}

@Override
public void run() {
super.run();

synchronized (obj) {
for (int i = 0; i < 100; i++) {
System.out.println(number + "-" + i);
}
}
}

public static void main(String args[]) {
Object obj = new Object();
for (int i = 0; i < 3; i++) {
new SynchronizeThread(i, obj).start();
}
}
}

死锁

public class DeathThread extends Thread {
private int number;
private Object objA;
private Object objB;

public DeathThread(int number, Object objA, Object objB) {
this.number = number;
this.objA = objA;
this.objB = objB;
}

@Override
public void run() {
super.run();

synchronized (objA) {
System.out.println(number + "--A");
try {
sleep(1000);
synchronized (objB) {
System.out.println(number + "--B");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public static void main(String args[]) {
Object objA = new Object();
Object objB = new Object();

// 死锁
//   new DeathThread(0, objA, objB).start();
//   new DeathThread(1, objB, objA).start();

// 不会死锁
new DeathThread(0, objA, objB).start();
new DeathThread(1, objA, objB).start();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: