首页 > 编程语言 >java-基础线程机制

java-基础线程机制

时间:2023-03-20 10:22:06浏览次数:32  
标签:do java Thread 线程 sleep 机制 executorService 守护

 

前言,基础线程机制:Executor管理多个异步任务的执行、Daemon守护线程、sleep()、yield()

 

一、Executor:

1.newCachedThreadPool(),一个任务创建一个线程

ExecutorService executorService = Executors.newCachedThreadPool();    
executorService.execute(()->{
    //TODO do sth.
    });
executorService.shutdown();

2.newFixedThreadPool(num),所有任务使用固定num大小的线程

CountDownLatch countDownLatch = new CountDownLatch(clientSize);
ExecutorService executorService = Executors.newFixedThreadPool(clientSize);
IntStream.range(0,clientSize).forEach(i ->
    executorService.submit(()->{
        //TODO do sth.
        countDownLatch.countDown();
	})
);
countDownLatch.await();
executorService.shutdown();        

>>> 输出效果:[clientSize]个线程并发执行//TODO do sth.

3.newSingleThreadExecutor(),相当于newFixedThreadPool(1)

ExecutorService executorService2 = Executors.newSingleThreadExecutor();
executorService2.shutdown();

  

二、Daemon

// Daemon守护线程。当所有非守护线程结束时,程序终止,同时杀死所有守护线程。main()属于非守护线程
    public void m2(){
        Thread t1 = new Thread(()->{
            //TODO do sth.
        });
        // 通过setDaemon设置该线程td为守护线程
        t1.setDaemon(true);
}

  

三、sleep()

// 基础线程机制:Thread.sleep(ms)
    public void m3(){
        try{
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);  // 因为异常不能跨线程传播回main()中,因此必须在本地进行处理
        }
    }

四、yield()

// 基础线程机制:yield(),对静态方法Thread.yidld()的调用声明了当前线程已经完成了生命周期中的最重要部分,可切换给其他线程执行。只是对线程调度器的一个建议
    public void m4(){
        Thread.yield();
    }

  

标签:do,java,Thread,线程,sleep,机制,executorService,守护
From: https://www.cnblogs.com/jinziguang/p/17235380.html

相关文章

  • 线程、进程
    一个进程中有多个线程,多个线程共享进程的堆和方法区资源,但是每个线程有自己的程序计数器和栈区域。程序计数器是一块内存区域,用来记录线程当前要执行的指令地址。每个线......
  • Java基础语法-数组
    第一部分:数组1.数组1.1数组介绍数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。1.2数组的定义格式1.2.1第一种格式数据类型[]数组名示例:int[]arr......
  • 【Java】Mybatis Plus LambdaQueryWrapper梳理
    【Java】Mybatis-PlusLambdaQueryWrapper梳理前言为了更方便的实现动态SQL,MybatisPlus在其基础上扩展了LambdaQueryWrapper,LambdaQueryWrapper提供了​​更加简便的查......
  • 1.2 垃圾回收机制
    1.什么场景下该使用什么垃圾回收策略?(1).对内存要求苛刻的场景想办法提高对象的回收效率,尽可能的多回收一些对象,腾出更多内存(2).在CPU使用率较高的情况下降低高并发时垃......
  • Tars-Java网络编程源码分析
    作者:vivo互联网服务器团队-JinKai本文从JavaNIO网络编程的基础知识讲到了Tars框架使用NIO进行网络编程的源码分析。一、Tars框架基本介绍Tars是腾讯开源的支持多语言的......
  • Matter 协议中的桥接机制(转自乐鑫博客)
    目前,亚马逊、苹果、谷歌和三星等多家大型物联网生态系统供应商已宣布支持Matter。可以预见的是,在逐渐扩展的Matter生态下,未来还将有更多厂商推出越来越多Matter设备。......
  • Playwright+JavaScript-1.环境准备与快速开始
    前言Playwright可以支持在TypeScript、JavaScript、Python、.NET、Java中使用,本系列以JavaScript语言为示例。环境准备1.安装node.js需要Node.js14或更高版本2......
  • PageHelper 使用 ThreadLocal 的线程复用问题,你用对了吗?(转载)
    前言PageHelper是较为常用的分页插件,通过实现Mybatis的Interceptor接口完成对querysql的动态分页,其中分页参数由ThreadLocal进行保存。简单的分页执行过程:......
  • Java stream sorted自定义排序规则实现多字段排序
      Stream提供了丰富的操作(中间操作和终端操作)集合元素的轮子,但Stream流操作不影响原始集合数据,执行结果是一个新的集合对象。在《Javastreamsorted使用Comparator进......
  • Python 多进程、多线程对比(转载)
    https://www.runoob.com/w3cnote/python-single-thread-multi-thread-and-multi-process.html具体实验见原文,这里只是引用实验结果,方便查询......