在JAVA中线程类的创建有三种方式。
一 继承Thread 类创建线程类
package com.vvan;
public class MyThread extends Thread {
private int i=0;
public void run(){
for (; i<10; i++) {
System.out.println(getName()+" "+i);
}
}
public static void main(String[]args){
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName()+""+i);
new MyThread().start();
new MyThread().start();
}
}
}
main0
Thread-0 0
main1
Thread-1 0
Thread-0 1
Thread-0 2
Thread-1 1
Thread-1 2
Thread-1 3
Thread-1 4
Thread-1 5
Thread-2 0
main2
Thread-0 3
Thread-2 1
两次new Thread 分别创建各自的Thread 实例,只能访问各自的实例变量i ,不能共享该实例变量。
二 实现Runnable 接口创建线程类
package com.vvan;
public class MyThread implements Runnable {
private int i=0;
public void run(){
for (; i<10; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
public static void main(String[]args){
System.out.println(Thread.currentThread().getName());
MyThread myThread=new MyThread();
new Thread(myThread,"我的一号线程").start();
new Thread(myThread,"我的二号线程").start();
}
}
main
我的二号线程 0
我的一号线程 0
我的二号线程 1
我的一号线程 2
我的二号线程 3
我的一号线程 4
我的二号线程 5
我的一号线程 6
我的二号线程 7
我的一号线程 8
我的二号线程 9
Process finished with exit code 0
在这里的线程对象依然是new Thread ,new MyThread(实现Runnable接口的自定义类) 只是作为new Thread的target,只创建类一次。被两个 new Thread 对象 共享使用。
三 使用Callable 和future 创建线程
省略。。。。
问题:为什么更偏向实现Runnable 接口
答:1.Java的继承只能单继承,这意味着已经有父类的子类并不可以再继承Thread类来实现多线程机制
2.实现Runnable接口的多线程类,可以共享类中同一个实例变量。更加符合使用多线程的业务需求