java手写简易线程池

java手写简易线程池
原理:生成几个Runnable实例,放入list中,Runnable实例不断询问任务列表中是否还有任务。有任务取出执行,无任务进行等待任务出现




import java.util.ArrayList;
import java.util.List;

public class TestThread {
    //创建一个任务列表 list
    List list = new ArrayList<Runnable>();

    //将任务加入到列表中,使用同步代码块锁住list列表,防止多线程操作线程不安全的ArrayLlist
    public void execute(Runnable f) {
        synchronized (list) {
            list.add(f);
            System.out.println("list" + list.size());
            list.notifyAll();
        }

    }

    public TestThread() {
        for (int i = 0; i < 3; i++) {
            WorkThreadsss workThreadsss = new WorkThreadsss(list);

            new Thread(workThreadsss).start();
        }
    }
//测试
    public static void main(String[] args) {
        TestThread threadPoolTest01 = new TestThread();
        //测试20000条任务
        for (int i = 0; i < 20000; i++) {
            int finalI = i;
            threadPoolTest01.execute(() -> System.out.println("任务执行中"+ finalI + Thread.currentThread().getName()));
        }
    }

    private class WorkThreadsss implements Runnable {
        List list;
        //初始化任务列表
        public WorkThreadsss(List list) {
            this.list = list;
        }

        @Override
        public void run() {

            System.out.println("运行中");
            //持续运行,等待任务列表不为空
            while (true) {
                Runnable o = null;
                synchronized (list) {
                    System.out.println(list.size());
                    //如果任务列表为空,进入等待
                    if (list.size() <= 0) {
//                        System.out.println("进入了" + Thread.currentThread().getId());
                        try {
                            list.wait(1000);
                            System.out.println(Thread.currentThread().getId()+"进程正在等待任务加入");
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    } else {
                        //如果任务列表为不为空,将任务分配给线程,移除任务
                        if (list.size() > 0) {
                            o = (Runnable) list.get(0);
                            System.out.println("开始执行");
                            list.remove(0);
                        }


                    }
                }
                //运行从列表获取的任务
                if (o != null) {
                    o.run();
                }

            }

        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值