美文网首页工作生活
Java创建线程的三种方式

Java创建线程的三种方式

作者: CaryZheng | 来源:发表于2019-06-30 16:17 被阅读0次

介绍

Java创建线程的三种方式:

  1. 直接继承Thread
  2. 通过Runnable实现
  3. 通过FutureTask和Callable实现

一、直接继承Thread

方法

定义一个类(比如:FirstThreadTest)继承于 Thread 类。

public class FirstThreadTest extends Thread {

    @Override
    public void run() {
        System.out.println("执行 " + getName() + " 线程");
    }
}

使用

FirstThreadTest thread1 = new FirstThreadTest();
thread1.run();

FirstThreadTest thread2 = new FirstThreadTest();
thread2.run();

输出

执行 Thread-0 线程
执行 Thread-1 线程

二、通过Runnable实现

方法

定义一个类(比如:RunnableThreadTest),实现 Runnable 接口。

public class RunnableThreadTest implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 10; ++i) {
            System.out.println("执行 " + Thread.currentThread().getName() + ", i = " + i);
        }
    }
}

使用

RunnableThreadTest runnableThreadTest = new RunnableThreadTest();
new Thread(runnableThreadTest, "新线程1").start();
new Thread(runnableThreadTest, "新线程2").start();

输出

执行 新线程1, i = 0
执行 新线程2, i = 0
执行 新线程2, i = 1
执行 新线程2, i = 2
执行 新线程2, i = 3
执行 新线程2, i = 4
执行 新线程1, i = 1
执行 新线程2, i = 5
执行 新线程1, i = 2
执行 新线程2, i = 6
执行 新线程1, i = 3
执行 新线程2, i = 7
执行 新线程1, i = 4
执行 新线程1, i = 5
执行 新线程2, i = 8
执行 新线程1, i = 6
执行 新线程1, i = 7
执行 新线程2, i = 9
执行 新线程1, i = 8
执行 新线程1, i = 9

(备注:因为是多线程,输出的结果可能不一定完全一致。)

三、通过FutureTask和Callable实现

方法

定义一个类(比如:CallableThreadTest)实现 Callable 接口。
另外,call 方法具有返回值,执行结束后可将结果返回给调用方。

public class CallableThreadTest implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        int i = 0;
        for(;i < 10; ++i) {
            System.out.println("执行 " + Thread.currentThread().getName() + ",i = " + i);
        }

        return i;
    }

}

使用

CallableThreadTest callableThreadTest = new CallableThreadTest();
FutureTask<Integer> futureTask = new FutureTask<>(callableThreadTest);

new Thread(futureTask, "有返回值的线程").start();

try {
    System.out.println("子线程的返回值:" + futureTask.get());
} catch (InterruptedException e) {
    e.printStackTrace();
} catch (ExecutionException e) {
    e.printStackTrace();
}

输出

执行 有返回值的线程,i = 0
执行 有返回值的线程,i = 1
执行 有返回值的线程,i = 2
执行 有返回值的线程,i = 3
执行 有返回值的线程,i = 4
执行 有返回值的线程,i = 5
执行 有返回值的线程,i = 6
执行 有返回值的线程,i = 7
执行 有返回值的线程,i = 8
执行 有返回值的线程,i = 9
子线程的返回值:10

相关文章

网友评论

    本文标题:Java创建线程的三种方式

    本文链接:https://www.haomeiwen.com/subject/hvrbcctx.html