序
创建线程有三种方式:
1、继承Thread类创建线程;
2、继承Runnable接口创建线程;
3、通过Callable和Future创建线程;
继承Thread类创建线程
public class ThreadTest extends Thread {
/**
* 构造函数
*/
public ThreadTest(String name) {
super(name);
}
@Override
public void run() {
// 此处写线程内代码
System.out.println(this.getName());
}
public static void main(String args[]) {
ThreadTest t1 = new ThreadTest("测试");
t1.start();
}
}
继承Runnable接口创建线程
public class ThreadTest implements Runnable {
private String name;
public ThreadTest(String name) {
this.name = name;
}
@Override
public void run() {
// 此处写线程内代码
System.out.println(name);
}
public static void main(String[] args) {
ThreadTest run1 = new ThreadTest("1");
Thread thread = new Thread(run1);
thread.start();
}
}
通过Callable和Future创建线程
public class CallableTest implements Callable {
private String name;
// 与Runnable不同是地方在于,Callable是有返回值的
@Override
public String call() {
System.out.println(name);
return name;
}
public static void main(String[] args) {
CallableTest<String> call = new CallableTest();
// 使用FutureTask来封装callable对象
FutureTask<String> ft = new FutureTask<String>(call);
System.out.println("当前线程:" + Thread.currentThread().getName());
Thread t1 = new Thread(ft);
t1.start();
}
}
其中FutureTask实现了RunnableFuture接口:
public class FutureTask<V> implements RunnableFuture<V> {
//...
}
RunnableFuture 定义如下:
public interface RunnableFuture<V> extends Runnable, Future<V> {
//...
void run();
}