java线程池的简单实现

   最近为了加强对线程池的理解,写了一个简单的线程池,实现思路是实现ThreadManager类,他拥有一个任务队列LinkedBlockingDeque tasks、空闲的worker集合free、工作中的worker集合working以及一个调度线程 dispacher ;工作方式是通过ThreadManager.execute方法将任务加入到tasks队列,然后由dispacher线程消费任务,从free获取空闲的worker,然后交给worker执行并将该worker放入working集合,等到worker执行任务完成后,再调用ThreadManager.addFree方法,进入空闲集合。ThreadManager.java代码如下:


package org.cylx.ml.core.thread;

import java.io.IOException;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingDeque;

/**
 *
 * @author root
 *
 */
public class ThreadManager {
    private LinkedBlockingDeque tasks = new LinkedBlockingDeque();
    private ConcurrentHashMap free = new ConcurrentHashMap();
    private ConcurrentHashMap working = new ConcurrentHashMap();
    private boolean close = false;
    private Object isWait = new Object();// 是否等待
    private int size;

    public void execute(Runnable task) {
        tasks.add(task);
        synchronized (isWait) {
            this.isWait.notifyAll();
        }
    }

    public void close() {
        this.close = true;
        while (true) {
            int size = working.size() + free.size();
            if (size == this.size) {
                break;
            } else {
                try {
                    Thread.sleep(200);
                } catch (Exception ex) {
                }

            }
        }
        Set> set = free.entrySet(


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部