欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

线程死锁演示,线程锁演示,模拟JVM的线程次序调度

来源: javaer 分享于  点击 8258 次 点评:187

线程死锁演示,线程锁演示,模拟JVM的线程次序调度


模拟JVM的线程次序调度

注释A,不注释B,一般不死锁

注释B,不注释A,死锁

都不注释,随机

package org.he.bin;/** * @author BenHe  * @email qing878@gmail.com * @for description dead lock */public class DeadLock extends Thread {    private boolean threadFlag;    private Object lock1 ;    private Object lock2 ;    public DeadLock(boolean threadFlag,Object lock1,Object lock2) {        this.threadFlag = threadFlag;        this.lock1=lock1;        this.lock2=lock2;    }    @Override    public void run() {        try {            if (threadFlag)                methodA();            else                methodB();        } catch (InterruptedException e) {            System.out.println(e.getMessage());        }    }    void methodA() throws InterruptedException {        synchronized (lock2) {            Thread.sleep(10); // point A            System.out.println(this.getName()+":lock lock2");            System.out.println(this.getName()+":wait for lock1");            synchronized (lock1) {                System.out.println(this.getName()+":in methodA");            }        }    }    void methodB() throws InterruptedException {//      Thread.sleep(10);  //point B        synchronized (lock1) {            System.out.println(this.getName()+":lock lock1");            System.out.println(this.getName()+":wait for lock2");            synchronized (lock2) {                System.out.println(this.getName()+":in methodB");            }        }    }    /**     * @param args     */    public static void main(String[] args) {        Object lock1 = new Object();        Object lock2 = new Object();        new DeadLock(true,lock1,lock2).start();        new DeadLock(false,lock1,lock2).start();    }}//该片段来自于http://byrx.net
相关栏目:

用户点评