线程创建简介
1.在java中表示线程的是Thread类。无论是那种方式创建线程,本质上都是创建Thread类的对象。
2.Thread类继承Runnable接口,且也有以Runnable作为参数的构造方法。
3.FutureTask这个类也实现了Runnable接口,故也可以作为参数传进Thread 里面来创建线程。
线程的创建
继承Thread类
package thread;
/**
* 继承thread类来创建线程
*
* @author dh
*
*/
public class ExtendsThread extends Thread {
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + " _"+i);
}
}
}
### 实现Runnable接口
package thread;
/**
* 实现 Runnable接口
*
* @author dh
*
*/
public class ImplementRunnable implements Runnable {
private int i;
public ImplementRunnable(int i) {
this.i = i;
}
@Override
public void run() {
for (; i < 20; i++) {
System.out.println(Thread.currentThread().getName() + " _" + i);
}
}
}
### 实现Callable接口
package thread; import java.util.concurrent.Callable; /** * * @author dh * */ public class ImplementCallable implements Callable### 创建线程{ private int i; public ImplementCallable(int i) { this.i = i; } @Override public String call() throws Exception { for (; i < 20; i++) { System.out.println(Thread.currentThread().getName() + " _" + i); } return "1"; } }
package thread;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
*
* @author dh
*
*/
public class TestD {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExtendsThread et = new ExtendsThread();
et.run();
ImplementRunnable imr = new ImplementRunnable(0);
Thread thread = new Thread(imr);
thread.start();
Thread thread1 = new Thread(imr);
thread1.start();
ImplementCallable implCallable = new ImplementCallable(1);
FutureTask ft = new FutureTask(implCallable);
Thread thread2 = new Thread(ft);
thread2.start();
System.out.println(ft.get());
}
}
}
结果如下:
main _0 main _1 main _2 main _3 main _4 main _5 main _6 main _7 main _8 main _9 Thread-1 _0 Thread-2 _0 Thread-1 _1 Thread-2 _2 Thread-1 _3 Thread-2 _4 Thread-1 _5 Thread-2 _6 Thread-1 _7 Thread-2 _8 Thread-1 _9 Thread-2 _10 Thread-1 _11 Thread-2 _12 Thread-1 _13 Thread-2 _14 Thread-1 _15 Thread-2 _16 Thread-1 _17 Thread-2 _18 Thread-1 _19 Thread-3 _1 Thread-3 _2 Thread-3 _3 Thread-3 _4 Thread-3 _5 Thread-3 _6 Thread-3 _7 Thread-3 _8 Thread-3 _9 Thread-3 _10 Thread-3 _11 Thread-3 _12 Thread-3 _13 Thread-3 _14 Thread-3 _15 Thread-3 _16 Thread-3 _17 Thread-3 _18 Thread-3 _19 1
3种方式创建的优缺点
1.继承Thread显然有个很大的缺点,java是单继承了,如果继承了Thread那么就无法继承其他类。但是继承Thread编写简单,实现方便。
2.实现Runnable接口和Callable接口。大致一样,区别就是Callable接口的实现可以有返回值,且可以抛出显示异常。其余大致一样。
他们的优势是实现接口,那么实现类可以有其他父类,避免的Thread的问题,其次可以用一个实现了该接口的对象来创建多个线程,从而方便一些基本的资源共享,因为是同一个对象。