目录
继承Thread类
1、Thread类并不是abstract类
class MyThread extends Thread {
@Override
public void run(){
System.out.println("sub thread");
}
}
public class Test {
public static void main(String args[]) {
MyThread th = new MyThread();
th.start();
}
}
实现Runable接口
public class Test {
public static void main(String args[]) {
Thread th = new Thread(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("subThead end");
});
th.setName("subThread");
th.start();
System.out.println("main end");
}
}
实现Callable接口
public class Main {
public static void main(String[] args) {
Callable<Integer> call = new Callable<Integer>(){
public Integer call(){
System.out.println("call");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 10;
}
};
FutureTask<Integer> future = new FutureTask<Integer>(call);
//FutureTask 可用于 闭锁 类似于CountDownLatch的作用,在所有的线程没有执行完成之后这里是不会执行的
Thread th = new Thread(future);
th.start();
try {
int out =future.get();
System.out.println(out);
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- callable有返回值
- future.get()必须等到线程执行完有返回值,才开始执行