java多线程上机题,写一个简单的死锁程序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_17011423/article/details/81868381

下面是一个非常简单的会出现死锁的程序:

*/package com.richinfo.cn.thread;
/** 
 * @author : Allen(Wu Zhiwei)
 * @date 创建时间:2018年5月17日 下午8:58:20 
 * @version 1.0 
 * @parameter  
 * @since  
 * @return  
 */
/**
 * @author Allen
 *
 */
public class DeathLockTest implements Runnable{

    private String s1 = new String();
    private String s2 = new String();

    public void fun1(){
        synchronized(s1){
            try {
                System.out.println(Thread.currentThread().getName() + "执行fun1");
                s1.wait(1000);
                System.out.println(Thread.currentThread().getName() + "执行fun1等待之后");
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            fun2();
        }
    }

    public void fun2(){
        synchronized(s2){
            try {
                System.out.println(Thread.currentThread().getName() + "执行fun2");
                s2.wait(1000);
                System.out.println(Thread.currentThread().getName() + "执行fun2等待之后");
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            fun1();
        }

    }

    /* (non-Javadoc)
     * @see java.lang.Runnable#run()
     */
    @Override
    public void run() {
        this.fun1();
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        DeathLockTest dt = new DeathLockTest();
        Thread t1 = new Thread(dt);
        t1.start();
        Thread t2 = new Thread(dt);
        t2.start();
        System.out.println("主线程执行完成");
    }

}

猜你喜欢

转载自blog.csdn.net/qq_17011423/article/details/81868381