`
modun
  • 浏览: 149756 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

写死锁的郁闷

    博客分类:
  • j2se
阅读更多
这段时间在看马士兵老师的关于线程同步的教程,完了自己想写一个死锁出来,按照马老师的精髓,我写了下面的代码,但我无论如何也没法将它锁死,下面是代码希望大家帮忙看下是什么原因,我感谢万分!!!!(jdK版本:6.0)
package cn.zhangxuemin.j2se;

public class TestDeadLock implements Runnable{
	static int flag  ;
	static Object o1 = new Object();
	static Object o2 = new Object();
	public void run () {
		System.out.println("flag= "+flag);
		if(flag==2) {
			synchronized (o1) {
				System.out.println("i am object 1");
				try {
					Thread.sleep(500);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				
				synchronized (o2) {
					System.out.println("i am object 2");
				}
			}
		}
		if(flag==1) {
			synchronized (o2) {
				System.out.println("i am object 222");
				try {
					Thread.sleep(500);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				synchronized (o1) {
					System.out.println("i am object 111");
				}
			}
		}
	}
	
	public static void main(String[] args) {
		TestDeadLock test1 = new TestDeadLock();
		TestDeadLock test2 = new TestDeadLock();
		
		
		Thread t1 = new Thread(test1);
		Thread t2 = new Thread(test2);
		flag = 1;
		t1.start();
		flag = 2;
		t2.start();
	}
	
}


运行结果:
flag= 2
i am object 1
flag= 2
i am object 2
i am object 1
i am object 2
分享到:
评论
1 楼 jefferson_sky 2009-03-12  
<pre name="code" class="java">这样改就行:</pre>
<pre name="code" class="java">public class TestDeadLock implements Runnable{  
    int flag  ;  
    static Object o1 = new Object();  
    static Object o2 = new Object();
    TestDeadLock(int i)
    {
    this.flag=i;
    }
   
    public void run () {  
        System.out.println("flag= "+flag);  
        if(flag==2) {  
            synchronized (o1) {  
                System.out.println("i am object 1");  
                try {  
                    Thread.sleep(500);  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
                  
                synchronized (o2) {  
                    System.out.println("i am object 2");  
                }  
            }  
        }  
        if(flag==1) {  
            synchronized (o2) {  
                System.out.println("i am object 222");  
                try {  
                    Thread.sleep(500);  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
                synchronized (o1) {  
                    System.out.println("i am object 111");  
                }  
            }  
        }  
    }  
      
    public static void main(String[] args) {  
        TestDeadLock test1 = new TestDeadLock(1);  
        TestDeadLock test2 = new TestDeadLock(2);  
          
          
        Thread t1 = new Thread(test1);  
        Thread t2 = new Thread(test2);  
        t1.start();  
        t2.start();  
    }  
      


</pre>
<p> </p>

相关推荐

    手写死锁检测组件1

    死锁检测组件1 在多线程或多进程环境中,死锁是一种常见的问题,会导致系统僵持不前。因此,检测死锁的存在是非常重要的。本文将介绍死锁检测组件的实现原理和算法。 一、死锁存在的条件 死锁是指多个线程或者...

    进程线程及死锁

    进程、线程、死锁和POSIX规范的系统调用 进程是操作系统中一个独立的执行单元,它拥有自己的虚拟地址空间和系统资源。线程是轻量级的进程,它共享同一个进程的虚拟地址空间和系统资源。理解进程和线程的概念对于...

    操作系统-死锁

    从进程同步的概念可以知道,当并发进程需要竞争使用资源或需要相互协作向前推进时,如果不采取同步措施,或同步措施不恰当,则很容易导致并发进程不能向前推进而陷入僵局,即死锁现象。死锁是发生在一组相互竞争或...

    SQL Server死锁的解除方法

    "SQL Server死锁的解除方法" SQL Server死锁是指在多个事务之间的资源竞争时,出现的循环等待资源的现象。死锁会导致系统性能下降,甚至会导致系统崩溃。因此,解决SQL Server死锁是非常重要的。 SQL Server死锁的...

    sqlserver如何快速查询死锁语句

    在SQL Server数据库管理系统中,死锁是一个常见的性能问题,它发生在两个或多个事务相互等待对方释放资源,导致它们都无法继续执行。死锁不仅影响数据库的正常运行,还可能导致数据一致性问题。本文将详细介绍如何在...

    DB2解决表死锁

    本文将深入探讨“DB2解决表死锁”这一主题,结合提供的资源“DB2解除表锁.doc”,我们将讨论死锁的基本概念、DB2中的死锁检测、死锁预防以及如何在遇到死锁时进行有效的解决。 首先,我们要理解什么是死锁。死锁是...

    mysql死锁的一些案例

    MySQL数据库在处理并发事务时,可能会遇到一种特殊的情况,即死锁。死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力干涉它们将无法继续执行。死锁是数据库系统中常见的问题,...

    数据库死锁-解决死锁问题的三种办法

    数据库死锁是多用户共享资源环境下常见的问题,尤其在事务处理密集的应用场景中更为突出。死锁发生时,两个或更多的事务互相等待对方释放资源,从而导致所有事务都无法继续执行,形成僵局。针对这一问题,数据库管理...

    oracle数据库解决死锁

    Oracle数据库解决死锁 Oracle数据库解决死锁是指在Oracle数据库中出现的死锁问题,通过使用PL/SQL语句手动解决死锁问题。死锁是当多个事务在等待其他事务释放资源时,导致系统无法继续执行的现象。 在Oracle...

    orcale死锁查杀PB版

    Oracle数据库在运行过程中,由于多个事务间的资源竞争,可能会出现死锁现象,导致某些事务无法继续执行。"Oracle死锁查杀PB版"是专为解决这类问题而设计的工具,它提供了便捷的方法来检测和解除数据库中的死锁。本文...

    死锁典型例题,对理解死锁的计算类题目有帮助

    死锁典型例题集锦 在操作系统原理中,死锁是一个非常重要的概念。死锁的出现可能会导致系统崩溃,因此了解死锁是非常必要的。本文总结了四个典型的死锁例题,旨在帮助读者更好地理解死锁的计算类题目。 例 1:死锁...

    死锁详解,如何表面死锁

    死锁是多任务操作系统中可能出现的一种异常状态,当两个或多个进程互相等待对方释放资源而无法继续执行时,系统就陷入了死锁。死锁的四个必要条件包括: 1. **互斥条件**:某些资源一次只能被一个进程使用,即在一...

    模拟死锁检测算法[死锁检测算法实现]

    "死锁检测算法实现" 在计算机科学中,死锁检测算法是一种重要的技术,用于检测系统中是否出现死锁现象。死锁是指两个或两个以上的进程在竞争资源时,导致系统无法继续执行下去的状态。死锁检测算法的主要任务是通过...

    oracle死锁原因解决办法

    ### Oracle死锁原因及解决办法 #### 一、Oracle死锁概述 在Oracle数据库系统中,死锁是一种常见的并发问题,它会导致多个事务之间互相等待对方释放资源而无法继续执行,最终导致整个系统的运行效率降低甚至停滞。...

    sql数据库死锁查询工具

    在SQL数据库管理中,死锁和阻塞是常见的问题,特别是在多用户环境下,它们可能导致系统性能下降甚至数据丢失。理解并有效地处理这些问题至关重要。本文将深入探讨“sql数据库死锁查询工具”及其在解决数据库死锁和...

    postgresql查询死锁以及杀死死锁进程sql.txt

    查询sql的死锁进程,查找并杀死。解决生产数据库中卡死的现象。postgresql查询死锁以及杀死死锁进程sql

    一次死锁追踪经历

    【死锁概述】 死锁是数据库管理系统中的一种常见问题,发生在两个或多个事务相互等待对方释放资源,导致它们都无法继续执行的情况。在这种情况下,如果没有外部干预,这些事务将永久阻塞,严重影响系统的性能和稳定...

    通过SQL Server Profiler来监视分析死锁

    在SQL Server数据库管理中,死锁是一个常见的性能问题,它发生在两个或多个事务相互等待对方释放资源时。本文将深入探讨如何使用SQL Server Profiler工具来监视和分析死锁,以便更好地理解和解决这类问题。 首先,...

    解决ORACLE死锁问题

    一、数据库死锁的现象 程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。 二、死锁的原理 当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提 交,另一条对于这一列...

    死锁的检测与接触 C语言

    在操作系统领域,死锁是指两个或多个并发进程互相等待对方持有的资源而无法继续执行的状态。本实验报告关注的是死锁的检测与解除,通过C语言实现。实验的主要目的是理解操作系统如何检测死锁的发生,并在发生死锁时...

Global site tag (gtag.js) - Google Analytics