简单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:一些基础界面的构造,排行榜的构造,用文件录入 ...
随机推荐
- html 的radio单选框如何实现互斥------radio只是input的type属性
先看看没有互斥的情况: <html> <body> 男性:<input type="radio" id="male" /> ...
- Python递归二分法
# lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963] # 时间复杂度. n# # 让用户输入一个数n. 判断这个n是否出现在lst中# n = ...
- java instanceof 的理解
简单来说,java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法 ...
- 【转载++】C/C++错误分析errno,perror,strerror和GetLastError()函数返回的错误代码的意义
本文是上一篇“fopen返回0(空指针NULL)且GetLastError是0”的侧面回应.听赶来多么地正确和不容置疑,返回NULL时调用GetLastError来看看报错啊,但当时却返回了0,大家都 ...
- python--模块之random随机数模块
作用是产生随机数 import random random.random:用于生成一个0--1的随机浮点数. print(random.random())>>0.3355102133472 ...
- 生产环境 tidb部署实践
TiDB 简介 TiDB 是 PingCAP 公司受 Google Spanner / F1 论文启发而设计的开源分布式 HTAP (Hybrid Transactional and Analytic ...
- MySQL - 问题集 - Access denied; you need the SUPER privilege for
当执行存储过程相关操作时,如果出现该错误,则往下看. 打开存储过程,会发现“CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost`”. 由于DEFI ...
- pg mysql 比较
PostgreSQL 与 MySQL比较: 一.pg优势: MySQL 不支持 OVER 子句, 而 Pg 支持 它可以存储 array 和 json, 可以在 array 和 json 上建索引, ...
- Android性能优化来龙去脉总结
WeTest 导读 一款app除了要有令人惊叹的功能和令人发指交互之外,在性能上也应该追求丝滑的要求,这样才能更好地提高用户体验. 以下是本人在工作中对经历过的性能优化的一些总结,依据故事的发展路线, ...
- python爬虫基础之一(爬淘宝)
没想到python如此强大, 今天看一会视频学会了一段python爬虫 这就是我今天学到的内容爬去淘宝网关于书包的一些信息,包括价格, #coding=utf-8 import requests#导入 ...