思路:
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);
}
});
}
}}
文章介绍了如何手写一个简单的线程池,包括定义线程数量、任务队列、WorkThread类的实现以及execute方法,最后在main方法中测试了线程池的使用。

2798

被折叠的 条评论
为什么被折叠?



