java 线程死锁的检测
2013-09-13 14:31
162 查看
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
将夜www.jiangyea.com
/**
* Hello world!
*/
public class App {
public static void main(String[] args) throws InterruptedException {
System.out.println("Hello World!");
ExecutorService executorService = Executors.newFixedThreadPool(2);
byte[] i = new byte[0];
byte[] j = new byte[0];
final CountDownLatch countDownLatch = new CountDownLatch(2);
executorService.execute(new DeadThread1(i, j,countDownLatch));
executorService.execute(new DeadThread2(i, j,countDownLatch));
countDownLatch.await();
System.out.println("done !!!");
}
public static class DeadThread1 implements Runnable {
private byte[] i;
private byte[] j;
private CountDownLatch countDownLatch;
public DeadThread1(byte[] i, byte[] j, CountDownLatch countDownLatch) {
this.i = i;
this.j = j;
this.countDownLatch = countDownLatch;
}
@Override
public void run() {
synchronized (i) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (j) {
System.out.println(Thread.currentThread().getName() + "is running!!");
countDownLatch.countDown();
}
}
}
}
public static class DeadThread2 implements Runnable {
private byte[] i;
private byte[] j;
private CountDownLatch countDownLatch;
public DeadThread2(byte[] i, byte[] j, CountDownLatch countDownLatch) {
this.i = i;
this.j = j;
this.countDownLatch = countDownLatch;
}
@Override
public void run() {
synchronized (j) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (i) {
System.out.println(Thread.currentThread().getName() + "is running!!");
countDownLatch.countDown();
}
}
}
}
}
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
将夜www.jiangyea.com
/**
* Hello world!
*/
public class App {
public static void main(String[] args) throws InterruptedException {
System.out.println("Hello World!");
ExecutorService executorService = Executors.newFixedThreadPool(2);
byte[] i = new byte[0];
byte[] j = new byte[0];
final CountDownLatch countDownLatch = new CountDownLatch(2);
executorService.execute(new DeadThread1(i, j,countDownLatch));
executorService.execute(new DeadThread2(i, j,countDownLatch));
countDownLatch.await();
System.out.println("done !!!");
}
public static class DeadThread1 implements Runnable {
private byte[] i;
private byte[] j;
private CountDownLatch countDownLatch;
public DeadThread1(byte[] i, byte[] j, CountDownLatch countDownLatch) {
this.i = i;
this.j = j;
this.countDownLatch = countDownLatch;
}
@Override
public void run() {
synchronized (i) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (j) {
System.out.println(Thread.currentThread().getName() + "is running!!");
countDownLatch.countDown();
}
}
}
}
public static class DeadThread2 implements Runnable {
private byte[] i;
private byte[] j;
private CountDownLatch countDownLatch;
public DeadThread2(byte[] i, byte[] j, CountDownLatch countDownLatch) {
this.i = i;
this.j = j;
this.countDownLatch = countDownLatch;
}
@Override
public void run() {
synchronized (j) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (i) {
System.out.println(Thread.currentThread().getName() + "is running!!");
countDownLatch.countDown();
}
}
}
}
}
相关文章推荐
- java 线程死锁的检测
- java 线程死锁的检测
- Atitit.线程 死锁 跑飞 的检测与自动解除 与手动解除死锁 java c# .net php javascript.
- Atitit.线程 死锁 跑飞 的检测与自动解除 与手动解除死锁 java c# .net php javascript.
- java线程死锁的检测方法
- 线程死锁检测方法
- java-线程-死锁
- Java 编程下的并发线程之间的同步代码块死锁
- Java多线程笔记一(创建运行,相关概念,JVM内存模型,线程有几种状态,死锁)
- 死锁线程探讨Java中的死锁现象
- Java死锁示例及检测
- Java线程死锁的概念
- java多线程系列5-死锁与线程间通信
- JAVA多线程-生产者与消费者当线程多时发生死锁的解决方法
- Thread Dump线程死锁检测工具(JStack)的使用详解
- 这个是java线程死锁了吗??
- java线程死锁研究
- Java复习之线程的同步与死锁
- Java第七课 Java的多线程程序进程和线程的概念,实现多线程的两种方式,线程同步的原理,线程的死锁,运用wait和notify来实现producer - consumer关系,线程终止的两种情况。
- 线程死锁检测方法