美文网首页工作生活
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