限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: muyang-0410
先来写一段死锁的程序:
package test;
/**
* @author test
*/
public class JStackDemo {
public static void main(String[] args) {
Thread t1 = new Thread(new DeadLockclass(true));//建立一个线程
Thread t2 = new Thread(new DeadLockclass(false));//建立另一个线程
t1.start();//启动一个线程
t2.start();//启动另一个线程
}
}
class DeadLockclass implements Runnable {
public boolean flag;// 控制线程
DeadLockclass(boolean flag) {
this.flag = flag;
}
public void run() {
// 如果flag的值为true则调用t1线程
if (flag) {
while (true) {
synchronized (Suo.o1) {
System.out.println("o1 " + Thread.currentThread().getName();
synchronized (Suo.o2) {
System.out.println("o2 " + Thread.currentThread().getName();
}
}
}
}
// 如果flag的值为false则调用t2线程
else {
while (true) {
synchronized (Suo.o2) {
System.out.println("o2 " + Thread.currentThread().getName();
synchronized (Suo.o1) {
System.out.println("o1 " + Thread.currentThread().getName();
}
}
}
}
}
}
class Suo {
static Object o1 = new Object();
static Object o2 = new Object();
}
当我启动该程序时,我们看一下控制台:
我们发现线程死锁,程序只输出了两行内容,然后程序就不再打印其它的东西了,但是程序并没有停止。 这样就产生了死锁。 当线程1使用锁住了o1的同时,线程2也是用锁住 了o2。当两个线程都执行完第一个打印任务的时候线程死锁,线程1想锁住o2,线程2想锁住o1。但是,线 程1当前锁着o1,线程2锁着o2。所以两个想成都无法继续执行下去,就造成了死锁。
然后,我们使用来看一下线程堆栈信息: [ ] pid

堆栈写的很明显,它告诉我们 Found one Java-level ,然后指出造成死锁的两个 线程的内容。然后,又通过 Java stack for the above来显示更详细的 死锁的信息。
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: muyang-0410
声明:本站所有资源系站长耗费大量精力时间物力长期搜集维护,故仅对会员免费开放,每日手选更新,非烂大街的采集站,开通会员: 点击此处自助开通或者联系站长微信muyang-0410开通




