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());}
}