`
modun
  • 浏览: 148510 次
  • 性别: 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规范的系统调用 进程是操作系统中一个独立的执行单元,它拥有自己的虚拟地址空间和系统资源。线程是轻量级的进程,它共享同一个进程的虚拟地址空间和系统资源。理解进程和线程的概念对于...

    操作系统-死锁

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

    java死锁源码java死锁源码

    java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁...

    sqlserver如何快速查询死锁语句

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

    mysql死锁的一些案例

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

    DB2解决表死锁

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

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

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

    sql数据库死锁查询工具

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

    orcale死锁查杀PB版

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

    sqlite死锁datebaselock解决方案

    4. **死锁检测与恢复**:SQLite内建了死锁检测机制,当检测到死锁时,会回滚其中一个事务以解除死锁。但也可以在应用程序层面主动检测和处理死锁。 5. **使用WAL模式**:Write-Ahead Logging(预写日志)模式能有效...

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

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

    死锁详解,如何表面死锁

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

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

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

    oracle死锁原因解决办法

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

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

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

    解决sqlite死锁示例异常database is locked示例

    在数据库管理中,死锁是常见的问题之一,特别是在并发环境中,比如SQLite这样的嵌入式数据库。当两个或多个事务在执行过程中,互相等待对方释放资源,导致无法继续进行时,就发生了死锁。"database is locked"错误是...

    一次死锁追踪经历

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

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

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

    解决ORACLE死锁问题

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

Global site tag (gtag.js) - Google Analytics