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();
        }
    }
  • 相关阅读:
    CUBRID学习笔记 41 sql语法之select
    CUBRID学习笔记 40 使用net修改数据
    CUBRID学习笔记 39 net使用dataset 返回查询的数据
    CUBRID学习笔记 38 net调用java的函数过程
    CUBRID学习笔记 36 在net中添加多行记录
    CUBRID学习笔记 37 ADO.NET Schema Provider
    CUBRID学习笔记 35 net驱动错误码和信息 cubrid教程示例
    程序员应该关注的一些事儿
    如何区分一个程序员是“老手“还是“新手“?
    10个调试和排错的小建议
  • 原文地址:https://www.cnblogs.com/mufeng07/p/12884003.html
Copyright © 2011-2022 走看看