多线程:创建线程

使用Thread

如下,需要重载Thread类的run方法

    private static void runThread() {
        Thread thread = new Thread("t1"){
            @Override
            public void run() {
                log.info("running");
            }
        };
        thread.start();
    }

注意:调用thread.run()也可以通过编译运行,但是不能新建一个线程,而是在当前线程中调用run()方法,作为一个普通的方法调用。(串行执行Thread中的run方法)

实现Runnable接口

因为Thread类中有一个这样的构造方法:

    public Thread(Runnable target) {
        init(null, target, "Thread-" + nextThreadNum(), 0);
    }

所以我们可以实现Runnable接口去新建一个线程

    private static void runThread2(){
        Runnable runnable = new Runnable(){
            @Override
            public void run() {
                log.info("running1");
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
    }

使用java8的新特性lambda:

    private static void runThread3(){
        Runnable runnable = () -> log.info("running");
        Thread thread = new Thread(runnable);
        thread.start();
    }

推荐使用这种方法!

FutureTask配合Thread

FutureTask能够接收Callable类型的参数,用来处理有返回结果的情况。
FutureTask继承关系:

    private static Integer runThread() {
        FutureTask<Integer> futureTask = new FutureTask<>(() -> 1);
        Thread thread = new Thread(futureTask);
        thread.start();
        try {
            return futureTask.get();
        } catch (InterruptedException | ExecutionException ignored) {
        }
        return 0;
    }
原文地址:https://www.cnblogs.com/wwjj4811/p/13667278.html