简单java死锁设计002
- /**
- * 死锁举例
- * @author lenovo
- *
- */
- public class DeadlockTest {
- private static Object obj1 = new Object();
- private static Object obj2 = new Object();
- public static void main(String[] args) {
- new DeadlockTest().deadLock();
- }
- private void deadLock(){
- new Thread(new Runnable(){
- @Override
- public void run() {
- synchronized(obj1){
- try {
- Thread.sleep(5000);
- System.out.println("obj1 locking");
- } catch (InterruptedException e) {}
- synchronized(obj2){
- System.out.println("bbb");
- }
- }
- }
- }).start();
- new Thread(new Runnable(){
- @Override
- public void run() {
- synchronized(obj2){
- try {
- Thread.sleep(5000);
- System.out.println("obj2 locking");
- } catch (InterruptedException e) {}
- synchronized(obj1){
- System.out.println("aaa");
- }
- }
- }
- }).start();
- }
- }
- //来源:网上抄的
死锁例子2
- package com.loong.main;
- public class ThreadDeadlock {
- public static void main(String[] args) throws InterruptedException {
- Object obj1 = new Object();
- Object obj2 = new Object();
- Object obj3 = new Object();
- Thread t1 = new Thread(new SyncThread(obj1, obj2), "t1");
- Thread t2 = new Thread(new SyncThread(obj2, obj3), "t2");
- Thread t3 = new Thread(new SyncThread(obj3, obj1), "t3");
- t1.start();
- Thread.sleep(5000);
- t2.start();
- Thread.sleep(5000);
- t3.start();
- }
- }
- class SyncThread implements Runnable{
- private Object obj1;
- private Object obj2;
- public SyncThread(Object o1, Object o2){
- this.obj1=o1;
- this.obj2=o2;
- }
- @Override
- public void run() {
- String name = Thread.currentThread().getName();
- System.out.println(name + " acquiring lock on "+obj1);
- synchronized (obj1) {
- System.out.println(name + " acquired lock on "+obj1);
- work();
- System.out.println(name + " acquiring lock on "+obj2);
- synchronized (obj2) {
- System.out.println(name + " acquired lock on "+obj2);
- work();
- }
- System.out.println(name + " released lock on "+obj2);
- }
- System.out.println(name + " released lock on "+obj1);
- System.out.println(name + " finished execution.");
- }
- private void work() {
- try {
- Thread.sleep(30000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- t1 acquiring lock on java.lang.Object@3904dd9e
t1 acquired lock on java.lang.Object@3904dd9e
t2 acquiring lock on java.lang.Object@28147a15
t2 acquired lock on java.lang.Object@28147a15
t3 acquiring lock on java.lang.Object@7605d74a
t3 acquired lock on java.lang.Object@7605d74a
t1 acquiring lock on java.lang.Object@28147a15
t2 acquiring lock on java.lang.Object@7605d74a
t3 acquiring lock on java.lang.Object@3904dd9e- // 参考:http://www.importnew.com/9668.html
死锁举例3
- package com.loong.main;
- public class ThreadDeadLock2 {
- private static Object obj1 = new Object();
- private static Object obj2 = new Object();
- public static void main(String[] args) {
- DeadLock2 dl1 =new DeadLock2(obj1,obj2);
- DeadLock2 dl2 =new DeadLock2(obj1,obj2);
- dl1.flag = 0;
- dl2.flag = 1;
- new Thread(dl1).start();
- new Thread(dl2).start();
- }
- }
- class DeadLock2 implements Runnable{
- public int flag =0;
- private Object ob1;
- private Object ob2;
- public DeadLock2(Object o1,Object o2){
- this.ob1 = o1;
- this.ob2 = o2;
- }
- @Override
- public void run() {
- if(flag==0){
- synchronized(ob1){
- System.out.println("ob1" + "starting");
- try {
- Thread.sleep(5000);
- System.out.println("ob1" + "ending");
- } catch (InterruptedException e) {}
- synchronized(ob2){
- System.out.println("ob2");
- }
- }
- }
- if(flag==1){
- synchronized(ob2){
- System.out.println("ob2" + "starting");
- try {
- Thread.sleep(5000);
- System.out.println("ob2" + "ending");
- } catch (InterruptedException e) {}
- synchronized(ob1){
- System.out.println("ob1");
- }
- }
- }
- }
- }
// Java线程多线程编程【尚学堂科技马士兵Java基础教程】
简单java死锁设计002的更多相关文章
- 一个简单的Java死锁示例(转)
在实际编程中,要尽量避免出现死锁的情况,但是让你故意写一个死锁的程序时似乎也不太简单(有公司会出这样的面试题),以下是一个简单的死锁例子,程序说明都写着类的注释里了,有点罗嗦,但是应该也还是表述清楚了 ...
- 最简单直接地理解Java软件设计原则之开闭原则
写在前面 本文属于Java软件设计原则系列文章的其中一篇,后续会继续分享其他的原则.想以最简单的方式,最直观的demo去彻底理解设计原则.文章属于个人整理.也欢迎大家提出不同的想法. 首先是一些理论性 ...
- 数据表与简单java类映射转换
简单的Java类的定义来源于数据表的结构, 例如:雇员信息表.部门信息表描述的就是雇员或部门的信息, 在实际的开发之中,数据表和简单java类之间的映射关系如下: 1. 数据实体表设计 = 类的定义: ...
- 实例详解 Java 死锁与破解死锁
锁和被保护资源之间的关系 我们把一段需要互斥执行的代码称为临界区.线程在进入临界区之前,首先尝试加锁 lock(),如果成功,则进入临界区,此时我们称这个线程持有锁:否则呢就等待,直到持有锁的线程解锁 ...
- Java界面设计 Swing(1)
Java界面设计的用途 开发者可以通过Java SE开发丰富并且强大的具有图形界面的桌面应用程序.也可以设计一些提高效率的工具软件,帮助自己处理机械性工作. Java 的图形界面工具包,可以用于工具类 ...
- java课程设计(计算器)
JAVA课程 设 计 报 告 1206401-18 瞿杰 一.设计时间 2013年6月 24日-----6月28日 二.设计地点 湖南城市学院实验楼计算机506机房 三.设计目的 1.巩固学习VB ...
- Java课程设计——博客作业教学数据分析系统(201521123084 林正晟)
#课程设计--博客作业教学数据分析系统(201521123084 林正晟) 1.团队课程设计博客链接 博客作业教学数据分析系统 2.个人负责模块或任务说明 学生登陆界面的前端实现和与数据库的连接 学生 ...
- java课程设计--We Talk(201521123061)
java课程设计--We Talk(201521123061) 团队博客链接:http://www.cnblogs.com/slickghost/ 数据库 一.通过Dao模式建立与数据库的连接 1.数 ...
- Java课程设计——猜数游戏(201521123111 陈伟泽)
Java课程设计--猜数游戏(201521123111 陈伟泽) 1.团队课程设计博客链接 博客作业--猜数游戏 2.个人负责模块或任务说明 Answer:一些基础界面的构造,排行榜的构造,用文件录入 ...
随机推荐
- (杭电2053)A + B Again(转换说明符)
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): ...
- Python写网络后台脚本
Python写网络后台脚本. 首先安装Python3.6.5,在centos中自带的Python是2.6版本的,现在早就出现了3.6版本了况且2和3 之间的差距还是比较大的,所以我选择更新一下Pyth ...
- CSS 兼容iPhone X、iPhone XS及iPhone XR
@media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ra ...
- 十分钟搭建和使用sonarqube代码质量管理平台
前言 Sonarqube为静态代码检查工具,采用B/S架构,帮助检查代码缺陷,改善代码质量,提高开发速度,通过插件形式,可以支持Java.C.C++.JavaScripe等等二十几种编程语言的代码质量 ...
- Scala快速入门到精通 视频教程 百度云网盘下载地址
Scala快速入门到精通 视频教程 百度云网盘下载地址 Scala快速入门到精通 下载地址链接:https://pan.baidu.com/s/1bqGIKyF 密码:ojwd
- nmap教程(下)
九.脚本引擎 脚本文件存放在/usr/share/nmap/scripts目录下 SCRIPT SCAN: -sC: equivalent to --script=default #启用默认类脚本 - ...
- 20154327 Exp3 免杀原理与实践
实践内容 基础问题回答 (1)杀软是如何检测出恶意代码的? 杀毒软件主要靠特征码进行查杀,匹配到即为病毒. 还有通过云查杀,查看云端库中该文件是否属于恶意代码. 跟踪该程序运行起来是否存在恶意行为,来 ...
- 堪称最好的A*算法(转)
如此好贴,不能不转!原文地址:http://dev.gameres.com/Program/Abstract/Arithmetic/AmitAStar.mht 中文译文转自:http://blog.c ...
- Codeforces Round #460 (Div. 2) 前三题
Problem A:题目传送门 题目大意:给你N家店,每家店有不同的价格卖苹果,ai元bi斤,那么这家的苹果就是ai/bi元一斤,你要买M斤,问最少花多少元. 题解:贪心,找最小的ai/bi. #in ...
- CentOS 7.2安装11g数据库软件
Preface Yesterday I've installed the 11g GI software on CentOS 7.2.But I still encounter som ...