黑马程序员技术交流社区
标题:
为什么同步代码没锁主,帮忙看一下
[打印本页]
作者:
lovefmylgs
时间:
2014-5-23 07:39
标题:
为什么同步代码没锁主,帮忙看一下
帮我看下,我怎么锁都没有锁上,
lock.jpg
(15.52 KB, 下载次数: 10)
下载附件
2014-5-23 07:39 上传
作者:
875588381
时间:
2014-5-23 08:18
第一:代码太模糊了,大概看了下,是死锁的代码。
第二:看到类名首字母没有大写,就不想再看了,希望楼主注意代码格式哈。
第三:楼主确定两个线程使用的是两把锁码?要不要在static final Object a = new Object() / static final Object b = new Object() 试一下呢?或者使用一个类,来明确锁对象。
下面的代码绝对能锁上,希望对你有所帮助:)
class Chap28Demo3
{
public static void main(String[] args)
{
new Thread(new DeadLock(true)).start();
new Thread(new DeadLock(false)).start();
}
}
class DeadLock implements Runnable
{
private boolean flag;
public DeadLock(boolean flag) {
this.flag = flag;
}
public void run() {
if(flag) {
while(true) {
synchronized(MyLock.lockA) {
System.out.println(Thread.currentThread().getName() + "....if lockA");
synchronized(MyLock.lockB) {
System.out.println(Thread.currentThread().getName() + "....if lockB");
}
}
}
}
else {
while(true) {
synchronized(MyLock.lockB) {
System.out.println(Thread.currentThread().getName() + "....else lockB");
synchronized(MyLock.lockA) {
System.out.println(Thread.currentThread().getName() + "....else lockA");
}
}
}
}
}
}
class MyLock
{
public static final Object lockA = new Object();
public static final Object lockB = new Object();
}
复制代码
作者:
Dark_Horse
时间:
2014-5-23 09:59
要知道什么情况下会发生死锁,看楼上的就知道答案了.....
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2