黑马程序员技术交流社区
标题:
哪位大神可以说说多线程死锁的问题?
[打印本页]
作者:
少先队员
时间:
2014-5-13 00:35
标题:
哪位大神可以说说多线程死锁的问题?
请问死锁要必要掌握吗? 开发的时候会经常遇到死锁的问题吗?
作者:
钟成军
时间:
2014-5-13 01:15
/*
死锁程序经典案例
*/
class Test implements Runnable
{
private boolean flag;
Test(boolean flag)
{
this.flag = flag;
}
public void run()
{
if(flag)
{
while(true)
{
synchronized(MyLock.locka)
{
System.out.println("if locka");
synchronized(MyLock.lockb)
{
System.out.println("if lockb");
}
}
}
}
else
{
while(true)
{
synchronized(MyLock.lockb)
{
System.out.println("else lockb");
synchronized(MyLock.locka)
{
System.out.println("else locka");
}
}
}
}
}
}
class MyLock
{
static Object locka = new Object();
static Object lockb = new Object();
}
class DeadLockTest
{
public static void main(String[] args)
{
Thread t1= new Thread(new Test(true));
Thread t2= new Thread(new Test(false));
t1.start();
t2.start();
}
}
复制代码
应该都要掌握啊,死锁也不是很难,理解能写得出死锁就基本可以了,在开发中不一定会遇到,但你一定知道有这回事,以免出现了问题不知道哪里出的问题,以以是一个死锁的经典代码
作者:
彭飞
时间:
2014-5-13 13:51
:L
死锁都忘了。
代码借来看看。。。。。
作者:
pandapan
时间:
2014-5-14 22:26
本帖最后由 pandapan 于 2014-5-14 22:27 编辑
不愧是程序员呀,上来都喜欢直接写代码, 这样直接写出来确实证明自己很强悍,但是是不是符合提问者的要求呢?
1.多线程中死锁确实是要求掌握的,尤其是如果想做安卓方面的,这个属于多线程的必备知识,面试中应该会经常遇到的。
2.开发过程中一般是没有人故意写死锁的程序的,但是不免还是会遇到的,遇到之后就要会解决,因而就要理解死锁的发生
3.死锁的发生,是伴随着抢占资源而发生的,比如说线程A和线程B在运行着,A先抢占LockA锁,获得后然后才会去获得LockB锁,而线程B在运行时先会抢占LockB锁,获得后然后才会去获得LockA锁。我们应该知道的是线程会在任意时刻切换,因而有可能发生的是线程A恰好抢了LockA后,CPU切换了线程B运行,线程B恰好抢了LockB后继续运行,此时A要继续运行需要LockB,但是已经被B用着,B要继续运行需要LockA,但是已经被A用着,因而两个线程就开始相互僵持着,就死锁了。
4.至于例子嘛,就是 @钟成军 所写的经典案例,记得毕向东老师在java基础视频中讲到过,你可以再学习学习细节。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2