多线程

多线程出现死锁的原理是什么样的呀!能写个列子吗?感谢!

发生死锁的原因一般是两个对象的锁相互等待造成的。

那么为什么会产生死锁呢?
1.因为系统资源不足。
2.进程运行推进的顺序不合适。

3.资源分配不当。

学过操作系统的朋友都知道:产生死锁的条件有四个:
1.互斥条件:所谓互斥就是进程在某一时间内独占资源。
2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
3.不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。
4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

package cn.com.wangxiuwei.test;

public class TestThread implements Runnable {
private int istrue = 1;
private Object obj1 = new Object();
private Object obj2 = new Object();

public void run() {

    if (istrue == 1) {
        synchronized (obj1) {
            System.out.println("我已经锁定obj1,休息0.5秒后锁定obj2去!");
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (obj2) {
                System.out.println("1");
            }
        }
    }
    if (istrue == 0) {
        synchronized (obj2) {

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (obj1) {
                System.out.println("0");
            }
        }
    }
}

public static void main(String[] args) {
    TestThread  testThread1= new TestThread();
     TestThread testThread2 = new TestThread();
     testThread1.istrue  = 1;
     testThread2.istrue  = 0;
    Thread thread1 = new Thread(testThread1);
    Thread thread2 = new Thread(testThread2);
    System.out.println("线程开始!");
    thread1 .start();
    thread2 .start();
}

}

参见 http://www.iteye.com/problems/102391

非常直白的说:你和你哥哥穿越到石器时代,你哥哥带了一台macbook air,你带了一个移动电源,有一天电脑没电了,你哥哥问你要移动电源用用,你就想:‘除非你先把电脑给我玩两天我就给你电源’。但你哥哥却想的是:‘凭什么我要先给你电脑啊?你要先给我电源我就给你玩’。于是两个人陷入了僵局。你哥哥有电脑但是干不了别的,因为电源在你这呢,但你抱着电源也没用啊,石器时代就这一台电脑,于是你就等他妥协,他也等你妥协,然后你们俩就一直那么等。。。。。