创建线程的另一个方法,创建一个类实现Runnable
接口,并重写run
方法。然后在创建Thread时将这个类的实例作为参数传入,并用start()方法启动线程。
一、JDK帮助手册
同样的,打开JDK1.8帮助手册,搜索Thread
JDK1.8帮助手册资源
百度网盘:https://pan.baidu.com/s/1WZ-rCWG_HuAfTgQZVG2kXg
提取码:jdk8
jdk帮助手册已提供Runnable接口创建线程的示例。
二、代码示例
下面我们实操一下线程的创建:
实现Runnable接口创建线程:
public class ThreadDemo2 implements Runnable {
public void run() {
for(int i = 0; i < 10; i++) {
try {
// 睡眠100毫秒,以免CPU执行太快,看不出实验效果
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("我是线程" + i);
}
}
}
执行:
public static void main(String[] args) {
ThreadDemo2 threadDemo = new ThreadDemo2();
new Thread(threadDemo).start();
for(int i = 0; i < 10; i++) {
try {
// 睡眠100毫秒,以免CPU执行太快,看不出实验效果
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("我是main主程序" + i);
}
}
输出:
可以看到,新建的线程与main主程序交替执行。
三、小结
继承Thread类和实现Runnable接口对比:
1、继承Thread类
-
子类继承Thread类具备多线程能力
-
启动线程:子类对象实例.start()
-
不建议使用:避免JAVA单继承局限性
2、实现Runnable接口
-
实现接口Runnable具有多线程能力
-
启动线程:new Thread(传入目标对象实例).start()
-
推荐使用:避免单继承局限性,并且方便同一个对象被多个线程使用