0 0

多线程0

多线程出现死锁的原理是什么样的呀!能写个列子吗?感谢!
 
2014年7月18日 00:10

3个答案 按时间排序 按投票排序

0 0

采纳的答案

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

那么为什么会产生死锁呢?
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();
    }
}

2014年7月18日 00:32
0 0

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

2014年7月18日 14:22
0 0

参见 <a>http://www.iteye.com/problems/102391</a>

2014年7月18日 11:31

相关推荐

    大漠多线程模板_大漠_大漠多线程_

    "大漠多线程模板"是一个专门针对C#开发的多线程处理框架,它为开发者提供了便捷的方式来管理和优化多线程应用。这个框架由知名开发者"大漠"创建,旨在简化复杂的并发编程,提高代码的可读性和可维护性。 多线程允许...

    多线程_按键精灵经典多线程操作_

    在IT行业中,多线程是一种常见的编程技术,它允许程序同时执行多个独立的任务,从而提高计算机系统的效率和响应性。特别是在自动化工具如“按键精灵”中,多线程的应用能够显著提升其性能和实用性。 标题“多线程_...

    pb9多线程控件,能够真实实现多线程

    标题中的“pb9多线程控件”指的是在PowerBuilder 9.0(PB9)环境中,使用的一种能够实现真正多线程功能的组件或技术。PowerBuilder是一款经典的面向对象的开发工具,主要用于构建数据库应用系统。在PB的早期版本中,...

    C#多线程互斥实例 多线程获取同一变量

    在编程领域,多线程是实现并发执行任务的重要机制,特别是在现代计算机系统中,多核处理器使得多线程成为提高程序性能的关键手段。C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多...

    多线程编程示例

    在IT领域,多线程编程是一项关键技能,尤其是在性能优化和并发处理方面。本文将深入探讨多线程编程的基础知识,以帮助初学者快速入门。 首先,我们需要理解什么是多线程。多线程是指在一个进程中同时执行多个独立的...

    基于SpringBoot和POI实现单线程和多线程导出Excel.zip

    基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip...

Global site tag (gtag.js) - Google Analytics