1. Java创建线程的方式

发布于 2022年 01月 20日 01:37

package org.copico.study.thread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * 创建线程的方式
 */
public class Thread01Create {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        new MyThread1().start();

        new Thread(new MyThread2()).start();

        FutureTask<String> ft = new FutureTask<>(new MyThread3());
        new Thread(ft).start();
        System.out.println(ft.get());

        new Thread() {
            @Override
            public void run() {
                System.out.println("启动-匿名内部类方式创建线程");
            }
        }.start();

        new Thread(() -> System.out.println("启动-Java8方式创建线程")).start();

        FutureTask<Integer> ft2 = new FutureTask<>(() -> {
            System.out.println("Java8简写方式FutureTask");
            return 1;
        });
        new Thread(ft2).start();
        System.out.println(ft2.get());
    }

}

/**
 * 继承Thread方式
 */
class MyThread1 extends Thread {
    @Override
    public void run() {
        System.out.println("启动-继承Thread方式创建线程");
    }
}

/**
 * 实现Runnable
 * 在Thread中有个名为target的Runnable成员变量
 * private Runnable target;
 * 而Thread中的run方法如下所示
 * public void run() {
 * if (target != null) {
 * target.run();
 * }
 * }
 * Runnable优势:
 * Runnable更容易与线程池等高级API配合
 * Runnable让任务类脱离了Thread继承体系,更灵活
 */
class MyThread2 implements Runnable {
    @Override
    public void run() {
        System.out.println("启动-实现Runnable方式创建线程");
    }
}

class MyThread3 implements Callable<String> {
    @Override
    public String call() throws Exception {
        System.out.println("启动-实现Callable方式创建线程");
        return "123";
    }
}

推荐文章