创建线程的三种方式和区别

来源:互联网 发布:创业公司取名 知乎 编辑:程序博客网 时间:2024/06/06 21:40

第一种创建方式:

继承Thread,并且重写run方法。

package com.easytopit.thread;public class ExtendsThread extends Thread {@Overridepublic void run() {for(int i = 1;i<=100;i++){System.out.println("使用继承Thread的方法====="+i);}}}
第二种创建方式(一般用的最多):

实现Runable接口,并且重写run方法。

package com.easytopit.thread;public class RunableThread implements Runnable {@Overridepublic void run() {for(int i = 1;i<=100;i++){System.out.println("使用实现Runnable方法来创建线程====="+i);}}}

第三种创建方式:

实现Callable接口,并且重写call方法,通过FutureTask类来创建线程

package com.easytopit.thread;import java.util.concurrent.Callable;public class CallableThread implements Callable<Integer> {@Overridepublic Integer call() throws Exception {for(int i = 1;i<=100;i++){System.out.println("实现Callable接口并且实现call方法====="+i);}return null;}}

测试类如下:

package com.easytopit.thread;import java.util.concurrent.Callable;import java.util.concurrent.FutureTask;public class ThreadTest {public static void main(String[] args) {//创建线程Thread t1 = new ExtendsThread();Runnable run = new RunableThread();Thread t2 = new Thread(run);Callable<Integer> call = new CallableThread();FutureTask<Integer> ft = new FutureTask<>(call);Thread t3 = new Thread(ft);//只有start方法才是启动线程t1.start();t2.start();t3.start();}}

继承Thread类的,代码编写简单,并且可以使用currentThread()方法来访问当前线程,但是继承该类之后不能继承其它的类。

实现Runable接口,有利于扩展性,实现了该接口之后,还可以实现其它接口或者继承其它的类。

实现Callable接口,编写相对于其它两种比较复杂,但是可以有返回值并且能抛出异常。

1 0