栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

day07-12-单例模式-线程池场景

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

day07-12-单例模式-线程池场景

单例模式-线程池场景

单例模式:
package day07.java8.pattern.singleton;

import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadDemo02 {
    // 私有属性
    // 线程池,不赋值
    // service 这个对象,只能被创建一次
    private ExecutorService service;

    // 构造器,私有,不能被new
    private ThreadDemo02(){
        // Runtime.getRuntime().availableProcessors() 获取当前机器的逻辑核数量
        // 一般我们都再乘以一个2
        // 给线程池赋值
        service=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*2);
    }

    // ClassHolder属于静态内部类,在加载类Demo03的时候,只会加载内部类ClassHolder,
    // 但是不会把内部类的属性加载出来
    private static class ClassHolder{
        // 这里执行类加载,是jvm来执行类加载,它一定是单例的,不存在线程安全问题
        // 这里不是调用,是类加载,是成员变量
        private static final ThreadDemo02 holder =new ThreadDemo02();

    }

    public static ThreadDemo02 getInstance(){//第一次调用getInstance()的时候赋值
        return ClassHolder.holder;
    }

    public void submit(Runnable task){
        service.submit(task);

    }

    // 批处理任务
    public void submit(List tasks){
        tasks.stream().forEach(task->service.submit(task));

    }



}
提交任务
package day07.java8.pattern.singleton;

public class TestThreadDemo02 {
    public static void main(String[] args) {
        // 创建实例
        ThreadDemo02 threadDemo02 = ThreadDemo02.getInstance();
        // 提交第一个任务
        threadDemo02.submit(()-> System.out.println("aaaa"));
        // 提交第二个任务(随便提交了两个任务,但是线程池用的是一个)
        threadDemo02.submit(()-> System.out.println("bbbb"));


    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/723486.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号