zoukankan      html  css  js  c++  java
  • 创建线程的四种方式

    一、继承Thread类型

    步骤:

    1. 定义一个Thread类的子类,重写run方法,将相关逻辑实现,run()方法就是线程要执行的业务逻辑方法
    2. 创建自定义的线程子类对象
    3. 调用子类实例的star()方法来启动线程
    public class Test5 {
        public static void main(String[] args) {
           MyThread t1=new MyThread();
           t1.start();
            System.out.println(Thread.currentThread().getName()+"执行完成。");
        }
    }
    class MyThread extends Thread{
        @Override
        public void run(){
            System.out.println(Thread.currentThread().getName()+"执行中。。。");
        }
    }

    二、实现Runnable接口

    步骤

    1. 定义Runnable接口实现类MyRunnable,并重写run()方法
    2. 创建MyRunnable实例myRunnable,以myRunnable作为target创建Thead对象,该Thread对象才是真正的线程对象
    3. 调用线程对象的start()方法
    /**
     * @description: Runnable接口有@FunctionalInterface,可以通过lamada创建
     * @author: mufeng
     * @create: 2020/5/13 17:20
     */
    public class Test6 {
        public static void main(String[] args) {
            Thread t1=new Thread(()->{
                System.out.println(Thread.currentThread().getName()+"执行中");
            });
            t1.start();
            System.out.println(Thread.currentThread().getName()+"执行完成。");
        }
    }

    三、使用Callable和Future创建线程

    步骤

    1. 创建实现Callable接口的类myCallable
    2. 以myCallable为参数创建FutureTask对象
    3. 将FutureTask作为参数创建Thread对象
    4. 调用线程对象的start()方法
    /**
     * @description: Callable接口有@FunctionalInterface,可以通过lamada创建
     * @author: mufeng
     * @create: 2020/5/13 17:25
     */
    public class Test7 {
        public static void main(String[] args) {
            FutureTask<Integer> futureTask=new FutureTask(()->{
                System.out.println(Thread.currentThread().getName()+"执行中");
                return 1;
            });
            Thread t1=new Thread(futureTask);
            t1.start();
            try {
                System.out.println(Thread.currentThread().getName()+"结束:"+futureTask.get());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    四、使用Executor框架创建线程池

    Executors提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExecutorService接口。

    主要有newFixedThreadPool,newCachedThreadPool,newSingleThreadExecutor,newScheduledThreadPool

    public class Test8 {
        public static void main(String[] args) {
            ExecutorService executorService = Executors.newSingleThreadExecutor();
            for(int i=0;i<5;i++){
                executorService.execute(()->{
                    System.out.println(Thread.currentThread().getName()+"执行中");
                });
            }
            System.out.println("线程任务开始执行");
            executorService.shutdown();
        }
    }
  • 相关阅读:
    钉钉h5二次分享
    几种 JavaScript 动画库推荐
    Vue监听浏览器窗口大小发生变化触发的事件
    git将本地项目关联远程仓库并上传到新分支
    初识Node.js与内置模块
    Ajax
    关于linux环境下解 npm install卡在checking installable status(这一篇就够了)
    解决使用element-ui的el-table组件显示树形数据时,多选框全选无法选中全部节点问题
    视频防盗链是如何实现的?
    g2 plot柱状图的简单使用
  • 原文地址:https://www.cnblogs.com/mufeng07/p/12884003.html
Copyright © 2011-2022 走看看