异步

作者: 让你变好的过程从来都不会很舒服 | 来源:发表于2024-03-31 21:50 被阅读0次

1、继承Thread类

      Thread01 thread01 = new Thread01();
    thread01.start();
    System.out.println("main....end......");

2、实现Runnable接口

 Runnable01 runnable01 = new Runnable01();
   new Thread(runnable01).start();
    System.out.println("main....end......");

3、实现Callable接口+FutureTask(可以拿到返回结果,可以处理异常)

    FutureTask<Integer> futureTask = new FutureTask<>(new Callable01());
    new Thread(futureTask).start();
     // 阻塞等待整个线程执行完成,获取返回结果
    Integer integer = futureTask.get();
    System.out.println("main....end......"+integer);

4、线程池

     给线程池直接提交任务

5、区别

1、2不能得到返回值 第3种方式可以获取返回值
1、2、3都不能控制资源
 4可以控制资源,性能稳定。

6、测试代码

package com.atguigu.gulimall.search.thread;

import java.util.concurrent.*;

public class ThreadTest {
    //线程池
    public static ExecutorService service = Executors.newFixedThreadPool(10);

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        System.out.println("main....start......");
        /**
         * 1、继承Thread类
         *         Thread01 thread01 = new Thread01();
         *         thread01.start();
         *         System.out.println("main....end......");
         * 2、实现Runnable接口
         *         Runnable01 runnable01 = new Runnable01();
         *         new Thread(runnable01).start();
         *         System.out.println("main....end......");
         * 3、实现Callable接口+FutureTask(可以拿到返回结果,可以处理异常)
         *         FutureTask<Integer> futureTask = new FutureTask<>(new Callable01());
         *         new Thread(futureTask).start();
         *         // 阻塞等待整个线程执行完成,获取返回结果
         *         Integer integer = futureTask.get();
         *         System.out.println("main....end......"+integer);
         * 4、线程池
         *          给线程池直接提交任务
         *
         * 5、区别
         *    1、2不能得到返回值 第3种方式可以获取返回值
         *    1、2、3都不能控制资源
         *    4可以控制资源,性能稳定。
         */
        // 当前系统中,池只有一两个,每个异步任务,提交给线程池让他自己去执行就行
        service.execute(new Runnable01());
        System.out.println("main....end......");
    }

    public static class Thread01 extends Thread{

        @Override
        public void run(){
            System.out.println("当前线程:"+Thread.currentThread().getId());
            int i = 10/2;
            System.out.println("运行结果:"+i);

        }

    }

    public static class Runnable01 implements Runnable{

        @Override
        public void run() {
            System.out.println("当前线程:"+Thread.currentThread().getId());
            int i = 10/2;
            System.out.println("运行结果:"+i);
        }
    }

    public static class Callable01 implements Callable<Integer>{

        @Override
        public Integer call() throws Exception {
            System.out.println("当前线程:"+Thread.currentThread().getId());
            int i = 10/2;
            System.out.println("运行结果:"+i);
            return i;
        }
    }
}

相关文章

网友评论

      本文标题:异步

      本文链接:https://www.haomeiwen.com/subject/zpubtjtx.html