5. 改为 x 。
结果:编译失败。
Test.java:32: 错误: 找不到符号
synchronized(x)
^
符号: 变量 x
位置: 类 DeadLock
1 个错误
6. 定义变量 int m; int n; (boolean,char等相同情况)
结果:编译失败。
Test.java:86: 错误: 意外的类型
synchronized(m)
^
需要: 引用
找到: int
7. 定义引用数据类型的变量。数组。
结果:编译通过,运行无法出现死锁。
8. 定义 String m; String n;
结果:编译通过,提示空指针异常。
Exception in thread "Thread-0" Exception in thread "Thread-1" java.lang.NullPointerException
at DeadLock .run(Test.java:110)
at java.lang.Thread.run(Thread.java:722)
java.lang.NullPointerException
at DeadLock .run(Test.java:96)
at java.lang.Thread.run(Thread.java:722)
赋值后。 String m = "0"; String n = "1";
结果:编译通过,可以死锁。
改为 String m = "1"; String n = "1";
结果:编译通过,运行无法出现死锁。
9. 在DeadLock 类中建立对象:DeadLock a = new DL(); DeadLock b = new DL(); synchronized的锁换成a和b。
结果:编译通过,运行出现Error。
Exception in thread "main" java.lang.StackOverflowError
at DL.<init>(Test.java:48)
at DL.<init>(Test.java:48)
at DL.<init>(Test.java:48)
在以前的视频里好像见过这个Error,但是忘记了这是什么!
10. 在run方法内同步代码块前面加上这样一段代码
int x = 1;
while (x<2)
{
System.out.println(obj1.equals(obj2));
System.out.println(obj2.equals(obj1));
x+=1;
}
这样,要调用方法,对象肯定会创建的吧?
但是运行后,这两条比较的输出语句有输出,但是仍然没有出现死锁。