标签:xtend 方式 构造函数 main ring end nts system 而且
public class Demo1 { public static void main(String[] args) { MyThread mt = new MyThread(); mt.start(); for (int i = 0 ; i < 1000 ; i++){ System.out.println("bbb"); } } } class MyThread extends Thread{ @Override public void run() { for (int i = 0 ; i < 1000 ; i++){ System.out.println("aaaaa"); } } }
原理:Thread构造函数中传入了Runnable的引用,成员变量记住了它,调用start()方法时调用了run()方法,判断成员变量Runnable的引用是否为空。不为空时执行。编译时看的是Runnable的run(),运行是执行的是子类的run方法。
public class Demo2 { public static void main(String[] args) { Thread t = new Thread(new MyThread2()); // 父类引用指向子类对象 t.start(); for (int i = 0 ; i < 1000 ; i++){ System.out.println("bbb"); } } } class MyThread2 implements Runnable{ @Override public void run() { for (int i = 0 ; i < 1000 ; i++){ System.out.println("aaaaa"); } } }
优点:可以直接使用Thread类中的方法,代码简单
缺点:如果已经有了父类,就不能用这种方法了。
优点:即使自定义的线程有了父类也没有关系,因为有了父类也可以实现接口,而且接口是可以多实现的
缺点:不能直接使用Thread中的方法,需要先获取到线程对象后,才能得到Thread的方法,使用起来比较麻烦
如果没有父类,用Thread,否则用Runnable。
public class Demo3 { public static void main(String[] args) { new Thread() { // 继承Thread类 @Override public void run() { for (int i = 0 ; i < 1000 ; i++){ System.out.println("aaaaa"); } } }.start(); new Thread(new Runnable() { // 将Runnable的子类对象传递给Thread的构造方法 @Override public void run() { for (int i = 0 ; i < 1000 ; i++){ System.out.println("bbb"); } } }).start(); } }
标签:xtend 方式 构造函数 main ring end nts system 而且
原文地址:https://www.cnblogs.com/chichung/p/10283654.html