创建线程的四种方式

一、继承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();
    }
}

 

posted @ 2020-05-13 18:03  mufeng07  阅读(520)  评论(0编辑  收藏  举报