用Java手写一个简单线程池

文章介绍了如何手写一个简单的线程池,包括定义线程数量、任务队列、WorkThread类的实现以及execute方法,最后在main方法中测试了线程池的使用。

思路:

1.首先要定义线程数量以及任务数量

2.让定义的线程保持运行状态,执行线程的start方法

3.定义一个方法来执行任务,原理就是 往队列里面放线程任务

/**
 * 手写简单线程池
 */
public class Test2 {
   
    //定义一个有界队列来存放线程任务
    private static LinkedBlockingDeque<Runnable>linkedBlockingDeque;
    //线程池开关
    private Boolean isOpen=true;

    /**
     * 1.定义线程池方法, 传入线程数量和任务数量
     * @param runnableSize
     * @param ququqCount
     */
    public Test2(int runnableSize,int ququqCount){
        //workThreadList=new ArrayList<>(runnableSize);
        linkedBlockingDeque=new LinkedBlockingDeque<>(ququqCount);
        for (int i = 0; i < runnableSize; i++) {
            WorkThread workThread = new WorkThread();
            workThread.start();
        }
    }

    /**
     * 2.线程运行
     * 所以线程保持运行状态
     */
    class WorkThread extends Thread{
        @Override
        public void run() {
            //如果队列中还有线程任务 或者 线程池开关是开启
            while (linkedBlockingDeque.size()>0||isOpen){
                //循环执行线程任务
                Runnable poll = linkedBlockingDeque.poll();
                if (poll!=null){
                    poll.run();
                }
            }
        }
    }
    //线程执行的方法
    public Boolean execute(Runnable runnable){
       return linkedBlockingDeque.offer(runnable);
    }

    //测试线程池
    public static void main(String[] args) {
        //创建3个线程,10个任务
        Test2 test2=new Test2(3,10);
        for (int i = 0; i <10; i++) {
            final int count=i;
            Boolean execute = test2.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println("线程名称:" + Thread.currentThread().getName()+",执行次数:"+count);
                }
            });
        }

    }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值