java多线程有哪些实现方式?
文章目录
- java多线程有哪些实现方式?
 - 一、继承Thread类,重写run方法,调用start方法
 - 二、实现runnable接口,新建Thread类,用Thread构造函数初始化,调用start方法
 - 三、实现Callable接口,该方法可以通过FutureTask.get方法获取线程的结果
 
提示:以下是本篇文章正文内容,下面案例可供参考
一、继承Thread类,重写run方法,调用start方法
public class TreadTest extends Thread {@Overridepublic void run() {try {Thread.sleep(3000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(Thread.currentThread().getName());}public static void main(String[] args) {TreadTest t = new TreadTest();t.start();System.out.println(Thread.currentThread().getName());}}
 
tips:start方法才是新开启线程,此时代码会先答应出来main,然后才是run方法中的线程名。
 如果执行的是run方法:
public class TreadTest extends Thread {@Overridepublic void run() {try {Thread.sleep(3000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(Thread.currentThread().getName());}public static void main(String[] args) {TreadTest t = new TreadTest();t.run();System.out.println(Thread.currentThread().getName());}}
 
只会打印main,因为run方法并没有开启一个新的线程,run方法只是保存线程运行的代码块,不会创建新的线程,只是一个普通方法
二、实现runnable接口,新建Thread类,用Thread构造函数初始化,调用start方法
public class TreadTest implements Runnable {@Overridepublic void run() {try {Thread.sleep(2000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(Thread.currentThread().getName());}public static void main(String[] args) {Thread thread = new Thread(new TreadTest());thread.start();System.out.println(Thread.currentThread().getName());}
}
 
三、实现Callable接口,该方法可以通过FutureTask.get方法获取线程的结果
public class TreadTest implements Callable<String> {@Overridepublic String call() throws Exception {return Thread.currentThread().getName();}public static void main(String[] args) throws ExecutionException, InterruptedException {FutureTask<String> futureTask = new FutureTask<>(new TreadTest());new Thread(futureTask).start();System.out.println(futureTask.get());System.out.println(Thread.currentThread().getName());}
}
