Java多线程实现方法总结

一.实现Runnable接口
static class RunnableImpl implements Runnable {

    @Override
    public void run() {
        log.info("通过实现Runnable接口实现线程:{}", Thread.currentThread().getName());
    }
}

二.继承Thread类
static class ThreadImpl extends Thread {
    @Override
    public void run() {
        log.info("通过继承Thread类实现线程:{}", Thread.currentThread().getName());
    }
}

三.实现Callable接口
static class CallableImpl implements Callable<String> {

    @Override
    public String call() throws Exception {
        log.info("通过实现Callable接口实现线程:{}", Thread.currentThread().getName());
        return "callable创建线程成功";
    }
}

四.通过线程池创建
ExecutorService executorService = Executors.newFixedThreadPool(5); executorService.submit(new RunnableImpl()); 
Future<String> future = executorService.submit(new CallableImpl());

五.测试
public static void main(String[] args) throws ExecutionException, InterruptedException {
    // 1.实现Runnable接口
    new Thread(new RunnableImpl()).start();
    // 2.继承Tread类
    new ThreadImpl().start();
    /**
     * 3.实现Callable接口
     * 原理:通过RunnableFuture把Callable接口实现类进行包装
     * 实际上启动线程还是通过 executorService.submit(new Runnable实现类()); 方法启动线程的
     *
     */
    new Thread(new FutureTask<String>(new CallableImpl())).start();
    // 4.线程池实现
    ExecutorService executorService = Executors.newFixedThreadPool(5);
    executorService.submit(new RunnableImpl());
    Future<String> future = executorService.submit(new CallableImpl());
    String result = future.get();
    log.info("call方法返回结果:{}", result);
    executorService.shutdown();
}

猜你喜欢

转载自blog.csdn.net/weixin_39352976/article/details/108615342