1、写不写参数问题

图1

java构造方法易错集锦

对比

图2

java构造方法易错集锦

发现若 new的类中有参数时,构造方法要写有参构造。否则不用写。


2、this的指代问题

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 FuXie fs = new FuXie();

	public DeadLock() {
		new Thread(this).start();
		ys.say(fs);
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		fs.say(ys);
	}

	public static void main(String[] args) {
		new DeadLock();
	}
}

在该代码中,对构造方法里new对象有疑问:

思路:main方法里 new了DeadLock() 会默认调用DeadLock类的构造方法,然后执行了新建线程。在这里注意构造方法中的两行执行结果没有先后顺序,因为线程start了后只是资源申请了,不一定能立即新建线程,所以可能先执行了下一句后再执行此句。

注意,new Thread(this).start() 中的this指代类名DeadLock,若要写成传统方式则改为下面的代码。

 

代码也可以改成下面这样,将构造方法去掉,main函数里新建线程

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 FuXie fs = new FuXie();

	@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);
	}
}

 

相关文章:

  • 2021-07-12
  • 2021-09-14
猜你喜欢
  • 2022-02-04
  • 2022-02-02
  • 2021-12-19
  • 2022-12-23
  • 2021-11-05
  • 2021-06-01
  • 2021-09-13
相关资源
相似解决方案