方式一: 成为 Thread 的子类, 然后在 Thread 的子类. start
缺点: 存在耦合度 (因为线程任务 run 方法里面的业务逻辑 和 线程启动耦合了)
缺点: Cat extends Thread {} 后无法在继承其他的类了
注意:?? Cat 一旦继承 Thread,Cat 就属于线程对象
示例:
- package Android.java.thread04;
- /**
- * 定义线程的第一种方式 成为 Thread 的子类
- */
- class Cat extends Thread {
- @Override
- public void run() {
- super.run();
- for (int i = 0; i < 10; i++) {
- System.out.println("第" + (i + 1) + "次喵??");
- }
- }
- }
- public class ThreadTest {
- public static void main(String[] args) {
- // 第一种方式 然后在 Thread 的子类. start
- new Cat().start();
- }
- }
执行的结果日志打印:
方式二: 成为 Runnable 的实现类 由于 Thread 类可以指定执行 Runnable 接口实现类, 所以把 Runnable 实现类传递给 Thread 类, Thread 类. start
优点: 第一种方式存在耦合度, 第二种方式就解耦了, 因为线程任务 run 方法里面的业务逻辑 和 线程启动分离了)
Runnable 实现类
- new Thread().start();
- new Thread(传递 Runnable 实现类).start();
优点: Cat implements Runnable {} 后 还可以继承其他的类了
注意:?? Cat 一旦实现了 Runnable 接口, Cat 只属于 Runnable 实现类, 不属于线程, 千万不要以为此 Cat 是线程, 不过此 Cat 可以被 Thread 去执行任务
注意 Thread 才是线程
示例:
- package Android.java.thread05;
- /**
- * 定义线程的第二种方式 成为 Runnable 的实现类
- */
- class Cat implements Runnable {
- @Override
- public void run() {
- for (int i = 0; i < 8; i++) {
- System.out.println("第" + (i + 1) + "次喵??");
- }
- }
- }
- public class ThreadTest {
- public static void main(String[] args) {
- // 第二种方式 由于 Thread 类可以指定执行 Runnable 接口实现类, 所以把 Runnable 实现类传递给 Thread 类, Thread 类. start
- // new Thread(传递 Runnable 实现类).start();
- new Thread(new Cat()).start();
- }
- }
执行的结果打印:
来源: http://www.bubuko.com/infodetail-2909746.html