创建线程的四种方式

简介: 创建线程的四种方式
  1. 继承Thread类或者创建Thread对象

我们可以创建子类继承Thread类并重写run()方法,或者直接创建Thread对象重写run()方法

①继承Thread类、

public class MyThread01 {

   public static void main(String[] args) {

       MyThread myThread = new MyThread();

       myThread.start();

 

   }

}

class MyThread extends Thread{

   @Override

   public void run() {

       System.out.println("执行线程任务....");

   }

}

②创建Thread对象

d4adea8ee898136e2a452688d70d233c.png

runnable接口实现了函数式注解,这意味着我们可以通过lambda表达式描述其任务

  Thread t1 =new Thread(()->{

            System.out.println("在执行任务.....");

                });

        t1.start();

  1. 实现runnable接口

我们通过创建类引用runnable接口或者创建runnable接口的匿名实现类创建线程

Runnable runnable=new Runnable() {

           @Override

           public void run() {

               System.out.println("执行任务");

           }

       };

    Thread thread=new Thread(runnable);

    thread.start();


  1. 使用Callable和Future创建
  2. Callable callable= new Callable<Integer>() {

           @Override

           public Integer call() throws Exception {

               int a=10;

               int b=20;

               return a+b;

           }

       };

       FutureTask<Integer> integerFutureTask = new FutureTask<Integer>(callable);

       Thread t=new Thread(integerFutureTask);

       t.start();

       try {

           Integer integer = integerFutureTask.get();

           System.out.println("返回的结果为"+integer);

       } catch (InterruptedException e) {

           throw new RuntimeException(e);

       } catch (ExecutionException e) {

           throw new RuntimeException(e);

       }

runnable和callable的区别

①Callable要实现call(),并且有返回值,Runnable要实现run(),没有返回值

②Callable的call()可以抛出异常,Runnable的run()不能抛出异常

③Callable要搭配FutureTask一起使用,通过futureTask.get()来获取call()方法的返回值

④两者都是描线程任务的接口

利用线程池创建线程:在一般情况下我们使用自定义的线程池创建线程

public class MyExecutor {

   public static void main(String[] args) {

       ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 30, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<>(5),

               new ThreadPoolExecutor.AbortPolicy());

       //创建任务并提交至线程池,线程池就可执行任务

       for (int i=0;i<10;++i){

           int j=i;

           threadPoolExecutor.submit(()->{

               System.out.println(Thread.currentThread().getName()+"执行任务"+j);

 

           });

       }

   }

}

00e42616a5d0d265e3aa1469a24d8f3b.png

相关文章
|
6月前
线程创建的三大方式
线程创建的三大方式
39 0
|
4月前
|
Java 编译器
创建线程方式及应用总结
创建线程方式及应用总结
33 0
|
4月前
|
Java 编译器 程序员
线程创建及使用的三种方式总结
线程创建及使用的三种方式总结
36 3
|
6月前
|
Java
多线程创建方式三 - 实现Callable接口
多线程创建方式三 - 实现Callable接口
45 1
|
6月前
|
缓存 Java 开发者
(详解版)创建线程的四种方式
(详解版)创建线程的四种方式
289 0
|
Java
创建线程的方式
本章讲解了四种创建线程的方式
56 0
|
Java
创建多线程的方式四:使用线程池
创建多线程的方式四:使用线程池
58 0
创建线程的三种方式
创建线程的三种方式
68 0
|
Java
Java并发 -- 创建线程的四种方式
Java并发 -- 创建线程的四种方式
81 0
|
存储 Java
创建线程三种方法
创建线程三种方法