- 浏览: 377328 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
代码转自: http://leowzy.iteye.com/blog/740859
程序的运行会产生很多种不同的结果,有的是顺利执行完毕,大多数都会产生死锁:
1. Thread_monkey lock1
Thread_monkey lock2
Thread dolphin lock1
Thread dolphin lock2
这种是顺利执行完毕的。因为monkey线程执行完毕后dolphin才开始执行。这种可以忽略。
2. Thread_monkey lock1
Thread_monkey lock2
Thread dolphin lock1
monkey在执行到method2()的时候,dolphin正好开始执行。
此时dolphin进入到了method1()的synchronized (lock_1),而monkey则进入到了method2()的synchronized(lock_2)。
这时两个线程分别在之前的synchronized块中锁定了对方接下来所要锁定的资源。
既是:
线程 已锁定对象 需要对象
monkey -> lock_2 lock_1
dolphin-> lock_1 lock_2
两个线程都在锁定了对方所需要的对象,同时等待对方释放自己需要的对象。
程序进入死锁状态。
具体细节都在上面的链接里。
public class DeadLocker implements Runnable { int field_1; private Object lock_1=new int[1]; int field_2; private Object lock_2=new int[1]; public void method1(int value){ synchronized (lock_1){ System.out.println(Thread.currentThread().getName()+ "lock1"); synchronized (lock_2){ field_1=0;field_2=0; } } } public void method2(int value){ synchronized (lock_2){ System.out.println(Thread.currentThread().getName()+ "lock2"); synchronized (lock_1){ field_1=0;field_2=0; } } } @Override public void run() { method1(2); method2(1); } public static void main(String[] args) { DeadLocker d=new DeadLocker(); Thread t1=new Thread(d,"Thread_monkey"); Thread t2=new Thread(d,"Thread dolphin"); t1.start(); t2.start(); } }
程序的运行会产生很多种不同的结果,有的是顺利执行完毕,大多数都会产生死锁:
1. Thread_monkey lock1
Thread_monkey lock2
Thread dolphin lock1
Thread dolphin lock2
这种是顺利执行完毕的。因为monkey线程执行完毕后dolphin才开始执行。这种可以忽略。
2. Thread_monkey lock1
Thread_monkey lock2
Thread dolphin lock1
monkey在执行到method2()的时候,dolphin正好开始执行。
此时dolphin进入到了method1()的synchronized (lock_1),而monkey则进入到了method2()的synchronized(lock_2)。
这时两个线程分别在之前的synchronized块中锁定了对方接下来所要锁定的资源。
既是:
线程 已锁定对象 需要对象
monkey -> lock_2 lock_1
dolphin-> lock_1 lock_2
两个线程都在锁定了对方所需要的对象,同时等待对方释放自己需要的对象。
程序进入死锁状态。
具体细节都在上面的链接里。
发表评论
-
Socket编程的HelloWorld实例
2014-11-07 15:05 903public class Client { ... -
ImageIO宋体出现小方框的解决
2014-11-03 16:34 932http://www.blogjava.net/yuanqix ... -
ArrayList根据条件+for循环批量删除的方法
2014-09-23 11:39 2724场景如下: ArrayList<Obj> list ... -
Java内部类的实例化
2014-08-06 15:51 1039class A{ getInstance(){ ... -
通过Thread.sleep把任务平均分配给线程按顺序执行的小例子
2014-07-22 10:46 1090package com.lj.test.JavaSe4; ... -
输入两个整数, 计算百分比
2014-07-21 18:01 1470public static String getPercen ... -
timer cancel方法的一个小实例
2014-07-21 12:14 1140package com.lj.timer; import ... -
通过Calendar获取上个月的最后一天
2014-06-26 12:11 2881Calendar cal=Calendar.getI ... -
通过BigInteger进行数字进制的相互转换
2014-06-24 11:09 25691. 十六进制转换为十进制 BigInteger deci ... -
[转]RSA实例
2014-06-18 17:27 914package com.lj.rsa; import j ... -
[转]sun.misc.BASE64Encoder找不到jar包的解决方法
2014-06-18 15:43 9501.右键项目-》属性-》java bulid path-》jr ... -
空Object转换String的陷阱
2014-06-17 15:45 810Object a=null; String b ... -
Java Convert Long to Date
2014-06-16 18:06 774问题: I have list with long value ... -
[转]JAVA中List&Set转换
2014-06-07 14:23 536JAVA中List&Set转换 list = new ... -
aes加密时的Illegal key size or default parameters
2014-06-06 14:21 4208KeyGenerator kgen = KeyGenerat ... -
String.replaceLast()
2014-06-03 16:02 1100http://stackoverflow.com/questi ... -
[转]多线程任务分配实例
2014-05-26 15:50 706[url]http://www.iteye.com/probl ... -
通过正则表达式来获取json数值
2014-05-23 11:39 13private String getJsonValue(Str ... -
java找不到或无法加载主类
2014-05-19 13:21 1287用CMD运行java +类名, 居然碰到这个问题。 编译是没有 ... -
Java转义字符笔记 |
2014-01-12 21:01 923数据库有一个关键字列-keyword,里面存放的关键字格式如下 ...
相关推荐
在Java编程中,死锁是并发编程中一个重要的概念,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。这个例子中,我们将会深入探讨死锁的产生、识别以及如何避免它。 首先,让我们理解...
下面将详细解释Java中的死锁现象,并通过一个具体的例子来说明。 死锁的四个必要条件: 1. 互斥条件:至少有一个资源是不能同时被两个线程持有的,即一次只有一个线程可以访问。 2. 请求与保持条件:一个线程已经...
本源代码是博客《Java 多线程编程之七:死锁(附源代码)》附带的实例性源代码。原博客链接地址:http://blog.csdn.net/defonds/archive/2010/01/26/5258120.aspx。
线程池里的线程等待等待队列里的线程执行,等待队列里的等待线程池里的完成,相互等待
Java线程死锁是多线程编程中一个常见的问题,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。死锁的发生通常涉及到四个必要条件:互斥、请求与保持、不剥夺和循环等待。理解并解决Java...
在Java编程中,死锁是多线程环境下常见的问题,当两个或多个线程相互等待对方释放资源,导致它们都无法继续执行时,就会出现死锁。`synchronized`关键字是Java提供的一种内置锁机制,用于控制对共享资源的并发访问,...
Java线程死锁实例及解决方法 Java线程死锁是一种特殊的线程状态,发生死锁时,多个线程会相互等待,无法继续执行,直到外部干预。下面是Java线程死锁实例及解决方法的详细介绍。 一、死锁的定义 所谓死锁是指多个...
Java提供了一些工具如jstack和VisualVM来诊断和解决死锁问题。 总结起来,Java线程涉及的内容广泛,包括线程的创建、控制、同步以及线程池的使用。理解这些知识点对于编写高效、安全的多线程Java应用程序至关重要。...
本文通过一个简单的化妆类(Markup)和两个对象——口红(LipStick)和镜子(Mirror)的案例,展示了如何在Java中产生死锁。化妆类中的线程尝试同时持有这两个对象的锁,但顺序不同,从而导致了死锁。 首先,我们...
本教程将通过Java实现死锁的模拟,帮助学习者理解这一复杂的概念,并提供一个简单的、易于理解的解决方案。 首先,我们需要了解死锁的四个必要条件: 1. **互斥条件**:资源必须被单个进程独占,即在同一时刻,...
Java 中常见死锁与活锁的实例详解 Java 中的死锁和活锁是一种常见的并发编程问题,它们可能会导致程序崩溃或性能下降。在 Java 中,死锁和活锁的实例详解是指在多线程编程中,多个线程在访问共享资源时,可能会...
本文主要介绍了java线程死锁代码示例,分享了一个简单线程死锁的例子,需要的朋友可以参考下。以下是对该示例的详细解释和知识点总结: 1. 死锁的概念:死锁是操作系统层面的一个错误,是进程死锁的简称,最早在 ...
在这个例子中,我们可以看到线程死锁的问题是如何发生的,以及我们如何解决这个问题。 五、总结: Java 线程死锁的问题解决办法是非常重要的。在编写代码时,我们应该避免嵌套锁定,使用锁定的顺序,使用并发容器...
一个详细讲解JAVA_线程同步与死锁的例子 希望可以帮助到你。
在Java中,死锁的实例可以通过一个简单的代码示例来解释。考虑以下情况: ```java public class DeadThread { private Thread thread1; public DeadThread(Object object1, Object object2){ thread1 = new ...
从这两个例子,我们可以得出结论,产生死锁可能性的最根本原因是:线程在获得一个锁L1的情况下再去申请另外一个锁L2,也就是锁L1想要包含了锁L2,也就是说在获得了锁L1,并且没有释放锁L1的情况下,又去申请获得锁L2...
标题:一个简单的和死锁有关的程序 描述与分析: 本程序通过两个`DeadThread`线程类实例和两个`Test`对象实例演示了死锁(deadlock)现象。死锁是多线程编程中常见的一种问题,发生在多个线程相互等待对方释放资源...
本教程将深入探讨Java中的死锁问题及其解决策略,通过实例源代码帮助你更好地理解和避免这种情况。 1. **死锁定义**: 死锁是指两个或多个并发执行的线程在执行过程中,因争夺资源而造成的一种相互等待的现象,若...
Java中的死锁问题是一个多线程编程中常见的挑战,它发生在两个或更多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。死锁的产生有四个必要条件:互斥使用、不可抢占、请求和保持以及循环等待。理解这些...