书中常看到static Test t = new Test(); 不理解static是修饰谁的。
问师兄知道 static是修饰t代表的这个对象的。
通过一个例子理解:
package cn.itcast.deadlock;
class YuShi {
public synchronized void say(FuXie f) {
System.out.println("玉史:给我 30 亿欧圆,放了你儿子。");
f.get();
}
public synchronized void get() {
System.out.println("玉史终于得到了赎金,放了儿子,为了下次继续绑架。");
}
}
class FuXie {
public synchronized void say(YuShi y) {
System.out.println("付谢:放了我儿子,我给你 30 亿欧圆,不见人不给钱。");
y.get();
}
public synchronized void get() {
System.out.println("付谢救回了自己的儿子,于是开始哭那 30 亿。");
}
}
public class DeadLock implements Runnable {
static YuShi ys = new YuShi();//static的理解
static FuXie fs = new FuXie();//static的理解
@Override
public void run() {
// TODO Auto-generated method stub
fs.say(ys);
}
public static void main(String[] args) {
DeadLock dl = new DeadLock();
new Thread(dl).start();
ys.say(fs);
}
}
在main方法中要用ys 和 fs时,需要用到DeadLock类的成员变量ys,fs。
若将这两行的static去掉,则需要在main方法里,用dl调用它们。
加了静态后用类名调用即可,默认这里不写类名也可以