限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,请联系我们进行处理。