使用Thread
如下,需要重载Thread类的run方法
private static void runThread() {
Thread thread = new Thread("t1"){
@Override
public void run() {
log.info("running");
}
};
thread.start();
}
注意:调用thread.run()也可以通过编译运行,但是不能新建一个线程,而是在当前线程中调用run()方法,作为一个普通的方法调用。(串行执行Thread中的run方法)
实现Runnable接口
因为Thread类中有一个这样的构造方法:
public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
}
所以我们可以实现Runnable接口去新建一个线程
private static void runThread2(){
Runnable runnable = new Runnable(){
@Override
public void run() {
log.info("running1");
}
};
Thread thread = new Thread(runnable);
thread.start();
}
使用java8的新特性lambda:
private static void runThread3(){
Runnable runnable = () -> log.info("running");
Thread thread = new Thread(runnable);
thread.start();
}
推荐使用这种方法!
FutureTask配合Thread
FutureTask能够接收Callable类型的参数,用来处理有返回结果的情况。
FutureTask继承关系:
private static Integer runThread() {
FutureTask<Integer> futureTask = new FutureTask<>(() -> 1);
Thread thread = new Thread(futureTask);
thread.start();
try {
return futureTask.get();
} catch (InterruptedException | ExecutionException ignored) {
}
return 0;
}