第一:代码太模糊了,大概看了下,是死锁的代码。
第二:看到类名首字母没有大写,就不想再看了,希望楼主注意代码格式哈。
第三:楼主确定两个线程使用的是两把锁码?要不要在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();
- }
复制代码 |