• 多线程:创建线程


    使用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;
        }
    
  • 相关阅读:
    Flink CEP实例及基础应用
    seata 分布式事务
    skywalking 分布式链路追踪
    datax 离线数据同步工具
    rocketmq 消息队列
    Nacos 服务注册
    跨站(cross-site)、跨域(cross-origin)、SameSite与XMLHttpRequest.withCredentials
    读写二进制文件与文本文件
    WPF中通过双击编辑DataGrid中Cell(附源码)
    记一次XML文件读取优化
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/13667278.html
Copyright © 2020-2023  润新知