一个简单的死锁例子

/**

* 一个简单的死锁类

* 当DeadLock类的对象flag==1时(td1),先锁定o1,睡眠500毫秒

* 而td1在睡眠的时候另一个flag==0的对象(td2)线程启动,先锁定o2,睡眠500毫秒

* td1睡眠结束后需要锁定o2才能继续执行,而此时o2已被td2锁定;

* td2睡眠结束后需要锁定o1才能继续执行,而此时o1已被td1锁定;

* td1、td2相互等待,都需要得到对方锁定的资源才能继续执行,从而死锁。

*/

public class DeadLock implements Runnable { 

    public int flag = 1

    //静态对象是类的所有对象共享的 

    private static Object o1 = new Object(), o2 = new Object(); 

    @Override

    public void run() { 

        System.out.println("flag=" + flag); 

        if (flag == 1) { 

            synchronized (o1) { 

                try 

                    Thread.sleep(500); 

                } catch (Exception e) { 

                    e.printStackTrace(); 

                

                synchronized (o2) { 

                    System.out.println("1"); 

                

            

        

        if (flag == 0) { 

            synchronized (o2) { 

                try 

                    Thread.sleep(500); 

                } catch (Exception e) { 

                    e.printStackTrace(); 

                

                synchronized (o1) { 

                    System.out.println("0"); 

                

            

        

    

  

    public static void main(String[] args) { 

          

        DeadLock td1 = new DeadLock(); 

        DeadLock td2 = new DeadLock(); 

        td1.flag = 1

        td2.flag = 0

        //td1,td2都处于可执行状态,但JVM线程调度先执行哪个线程是不确定的。 

        //td2的run()可能在td1的run()之前运行 

        new Thread(td1).start(); 

        new Thread(td2).start(); 

  

    

}

http://www.cnblogs.com/baizhanshi/p/5437933.html

时间: 2024-10-08 02:24:10

一个简单的死锁例子的相关文章

Java一个简单的死锁例子

内容:一个简单的死锁例子,大概的思路:两个线程A和B,两把锁X和Y,现在A先拿到锁X,然后sleep()一段时间,我们知道sleep()是不会释放锁资源的.然后如果这段时间线程B拿到锁Y,也sleep()一段时间的话,那么等到两个线程都醒过来的话,那么将互相等待对方释放锁资源而僵持下去,陷入死锁.flag的作用就是让A和B获得不同的锁. public class TestDeadLock { public void run() { MyThread mt = new MyThread(); ne

使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)

猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51007512 使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Networking做一个简单的多人游戏例子-3/3 7. 在网络中控制Player移动 上一篇中,玩家操

一个简单的KVO例子

一个简单的KVO例子. 两个界面,第一个界面显示名字和配偶(spouse)名字,第二个界面显示修改名字和配偶名字,返回时,将看到第一个界面的名字显示发生改变. 首先定义一个person类作为model. #import <Foundation/Foundation.h> @interface Person : NSObject @property (strong, nonatomic) NSString *name; @property (strong, nonatomic) NSString

编写一个简单的jdbc例子程序

1 package it.cast.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class Base { 10 11 public static void main(String[] args) th

一个简单的小例子让你明白c#中的委托-终于懂了!

模拟主持人发布一个问题,由多个嘉宾来回答这个问题. 分析:从需求中抽出Host (主持人) 类和Guests (嘉宾) 类. 作为问题的发布者,Host不知道问题如何解答.因此它只能发布这个事件,将事件委托给多个嘉宾去处理.因此在Host 类定义事件,在Guests类中定义事件的响应方法.通过多番委托的"+="将响应方法添加到事件列表中,最终 Host 类将触发这个事件.实现过程如下: 代码其实很少下面贴出来所有代码: QuestionArgs.cs view plaincopy to

一个简单的cmake例子

一个简单的cmake例子CMakeLists.txt,生成动态库文件,可以指定发布目录. 尚不支持: 1.交叉编译环境配置 2.添加依赖库 1 #在当前目录新建一个build目录,然后cd build:cmake .. 2 #这样的好处是,可以将cmake生成的内容,和源码文件分离 3 4 #定义好版本需求 5 cmake_minimum_required (VERSION 2.6) 6 #工程名字 7 project (Libtree) 8 #编译结果发布路径 9 set ( CMAKE_IN

Servlet学习教程(三)---- 一个简单的Servlet例子

我们用个最简单的Servlet例子来解说一下Servlet简单配置以及Servlet类实现类的写法. 第一,我们新建一个Dynamic Web Project,起名Servlet 点击NEXT,设置Default output folder 为Servlet/WebContent/WEB-INF/classes 第二,创建一个包,包名为Servlet,然后创建一个类名为WelcomeServlet类.(Servlet类当然缺少不了Servlet容器,请注意你的开发软件是否已经集成Servlet容

一个简单的springmvc例子 入门

一直是从事棋牌游戏,平常用的东西 大多数只是使用一些javase的一些 api对spring 这方面 用到的比较少,每次学了都忘,始终记不住.为了 更轻松学习springboot,从新学习了spring,学到springmvc记录一下学习过程,先从一个简单的例子入门. 首先说下springmvc:和Struts2 都是一个mvc的框架 属于spring 的后续产品 springmvc和Struts2的对比: 原文地址:https://www.cnblogs.com/920913cheng/p/1

一个简单的SignalR例子

本文介绍如何使用SignalR的Hub制作一个简单的点赞页面.不同浏览器(或者不同窗口)打开同一个页面,在任何一个页面点赞,所有页面同时更新点赞数. 1.使用Visual Studio Community 2013新建一个Web项目,选择空白模板. 2.使用NugGet安装SignalR. 3.添加Startup.cs. 代码如下. namespace SignalRDemo { public class Startup { public void Configuration(IAppBuild