Java并发编程(五)创建线程方式概览

1,363 阅读2分钟

banner窄.png

铿然架构  |  作者  /  铿然一叶 这是铿然架构的第 35 篇原创文章

相关阅读:

Java并发编程(一)知识地图
Java并发编程(二)原子性
Java并发编程(三)可见性
Java并发编程(四)有序性
Java并发编程入门(六)synchronized用法
Java并发编程入门(七)轻松理解wait和notify以及使用场景
Java并发编程入门(八)线程生命周期
Java并发编程入门(九)死锁和死锁定位
Java并发编程入门(十)锁优化
Java并发编程入门(十一)限流场景和Spring限流器实现
Java并发编程入门(十二)生产者和消费者模式-代码模板
Java并发编程入门(十三)读写锁和缓存模板
Java并发编程入门(十四)CountDownLatch应用场景
Java并发编程入门(十五)CyclicBarrier应用场景
Java并发编程入门(十六)秒懂线程池差别
Java并发编程入门(十七)一图掌握线程常用类和接口
Java并发编程入门(十八)再论线程安全
Java并发编程入门(十九)异步任务调度工具CompleteFeature
Java并发编程入门(二十)常见加锁场景和加锁工具


以下简述创建线程的几种方式,不深入展开,了解则可。

一、实现Runnable接口


1.业务类实现Runnable接口
2.Thread类注入业务类并启动
代码如下:

public class RunnableDemo {
    public static void main(String[] args) {
        //Thread构造器注入实现类并启动
        new Thread(new RunnableWorker()).start();
    }
}

//实现Runnable接口
class RunnableWorker implements Runnable {
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
    }
}

二、继承Thread类


业务类继承Thread,可直接以线程方式运行。代码如下:

public class ThreadDemo extends Thread {

    public static void main(String[] args) {
        new ThreadDemo().start();
    }
    
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
    }
}

三、实现Callable接口


业务类可以实现Callable接口或者Runnable接口,二者的区别是Callable执行完后有返回值,Runnable没有返回值。
代码如下:

public class FutureDemo {
    public static void main(String[] args) {
        FutureTask<Integer> task = new FutureTask(new CallableWorker());

        new Thread(task).start();

        try {
            System.out.println(task.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}

class CallableWorker implements Callable<Integer> {

    public Integer call() throws Exception {
        return 10;
    }
}

四、Executors构建


业务类可以实现Callable接口或者Runnable接口,二者的区别是Callable执行完后有返回值,Runnable没有返回值。
代码如下:

public class ExecutorsDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建线程池
        ExecutorService executorService = Executors.newFixedThreadPool(1);
        //提交匿名Callable
        Future<Integer> future = executorService.submit(new Callable<Integer>() {
            public Integer call() throws Exception {
                return 10;
            }
        });

        //获取线程执行返回值
        System.out.println(future.get());
    }
}

end.


<--阅过留痕,左边点赞 !