使用ThreadFactory 创建线程测试

使用ThreadFactory 创建线程测试,第1张

使用ThreadFactory 创建线程测试 一.参数说明
 构建线程池参数
  1.corePoolSize 核心线程数量
  2.maximumPoolSize 能创建的最大线程数,最大线程数不能大于核心线程数
  3.keepAliveTime 也就是当线程空闲时,所允许保存的最大时间,超过这个时间,线程将被释放销毁,但只针对于非核心线程
  4.TimeUnit 时间单位,TimeUnit.MICROSECONDS等
  5.workQueue 工作队列,这里有几种
    5.1 ArrayBlockingQueue 基于数组的有界阻塞队列,必须设置容量,遵循先进先出原则(FIFO)对元素进行排序。
    5.2 linkedBlockingQueue:一个基于链表结构的阻塞队列,可以设置容量,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue
    5.3 SynchronousQueue:一个不存储元素的阻塞队列。每个插入offer *** 作必须等到另一个线程调用移除poll *** 作,否则插入 *** 作一直处于阻塞状态,吞吐量通常要高于linkedBlockingQueue。
    5.4 PriorityBlockingQueue:一个具有优先级的无限阻塞队列。
  6.threadFactory 线程工厂,用于创建线程
  7.handler 当线程边达到最大容量时,用于处理阻塞时的程序策略
    7.1 ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
    7.2 ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
    7.3 ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
    7.4 ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务
 8.executorService.execute 执行一个实现Runnable 接口的线程
 9.executorService.shutdown();停止线程池
代码实例

项目 ThreadFactoryBuilder依赖

		
            com.google.guava
            guava
            20.0
        

ThreadTask

package com.thread.demo.test;

import com.google.common.util.concurrent.ThreadFactoryBuilder;

import java.util.concurrent.*;
public class ThreadTask {
    public static void testHospTest() {
        // 创建一个名为shopTest-pool-%d的线程池
        ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("shopTest-pool-%d").build();
        // 构建线程参数
        ExecutorService executorService = new ThreadPoolExecutor(3,
                3, 0l,
                TimeUnit.MICROSECONDS,
                new linkedBlockingQueue<>(3), threadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
        try {
            int a = 20;
            // 执行线程
            executorService.execute(new Seller(a));
        } catch (Exception e) {
            System.err.println("数值小于0"+e.getMessage());
        } finally {
            // 停止线程池
            executorService.shutdown();
        }
    }
}

Seller
这个Seller 在execute使用必须实现Runnable接口

package com.thread.demo.test;

public class Seller implements Runnable {

    private int ticket;

    public Seller(int ticket) {
        this.ticket = ticket;
    }

    @Override
    public void run() {
        if (ticket > 0) {
            while (ticket > 0) {
                ticket--;
                System.out.println("你已经白嫖了" + ticket + "次");
            }
        } else {
            System.err.println("输入参数有误");
        }
    }
}

测试
SellerTest

package com.thread.demo.test;

public class SellerTest {
    public static void main(String[] args) {
        System.out.println("开始白嫖");
        ThreadTask.testHospTest();
    }
}

测试结果

源码地址

https://gitee.com/FetterXxZzz/thread-factory-test.git

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5638137.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存