线程池

一个简单的线程池管理线程上传下载任务


/**线程池管理
 * @author qiumeng
 * @Package com.itrus.laweyecloud.thread
 * @Description:
 * @date 2018 2018/1/19 11:15
 */
@Component
public class ThreadPoolManager {

    @Autowired
    private ThreadPoolManager tpm;

    // 线程池维护线程的最少数量
    private final static int CORE_POOL_SIZE = 4;

    // 线程池维护线程的最大数量
    private final static int MAX_POOL_SIZE = 10;

    // 线程池维护线程所允许的空闲时间
    private final static int KEEP_ALIVE_TIME = 0;

    // 线程池所使用的缓冲队列大小
    private final static int WORK_QUEUE_SIZE = 10;

    // 消息缓冲队列
    Queue<Object> objectQueue = new LinkedList<Object>();

    // 访问消息缓存的调度线程
    // 查看是否有待定请求,如果有,则创建一个新的AccessDBThread,并添加到线程池中
    final Runnable accessBufferThread = new Runnable() {

        @Override
        public void run() {
            if (hasMoreAcquire()) {
                //取出消息队列的头一个信息
                Object object  = objectQueue.poll();
                if(object instanceof  FileOfBillWrap){
                    fileUploadThread  task=new fileUploadThread(((FileOfBillWrap)object));
                    threadPool.execute(task);
                }else if( object instanceof FileOfBill){
                    fileDownThread task=new fileDownThread((FileOfBill) object);
                    threadPool.execute(task);
                }
            }
        }
    };


    //一个没有能够被线程池执行的消息,重新放入消息队列中
    final RejectedExecutionHandler handler = new RejectedExecutionHandler() {

        public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
            objectQueue.offer(r);
        }
    };

    //重新定义线程池初始化参数
    @SuppressWarnings({ "rawtypes", "unchecked" })
    final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME,
            TimeUnit.SECONDS, new ArrayBlockingQueue(WORK_QUEUE_SIZE), this.handler);


    // 定义线程池调度任务
    final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(100);
    @SuppressWarnings("rawtypes")
    final ScheduledFuture taskHandler = scheduler.scheduleAtFixedRate(accessBufferThread, 0, 1, TimeUnit.SECONDS);


    public  ThreadPoolManager newInstance() {
        return tpm;
    }

    /**判断队列是否为空*/
    public boolean hasMoreAcquire() {
        return !objectQueue.isEmpty();
    }

    @Autowired
    private  fileDownThread fileDownThread;

    @Autowired
    private fileUploadThread fileUploadThread;

    /**
     * 放入文件上传任务
     */
    public  void putFileUploadThread(FileOfBillWrap fileOfBillWrap){
        fileUploadThread.setFileOfBillWrap(fileOfBillWrap);
        threadPool.execute(fileUploadThread);
    }

    /**
     * 放入文件下载任务
     */
    public  void putFileDownThread(FileOfBill fileOfBill){
        fileDownThread.setFileOfBill(fileOfBill);
        threadPool.execute(fileDownThread);
    }

}

上传文件线程


/**
 * @author qiumeng
 * @Package com.itrus.laweyecloud.thread
 * @Description:
 * @date 2018 2018/1/19 11:11
 */
@Component
@Transactional(readOnly = false, rollbackFor = Exception.class)
public class fileUploadThread implements  Runnable {

    private static Logger log = Logger.getLogger(fileUploadThread.class);



    private fileUploadThread(){};

    private FileOfBillWrap  fileOfBillWrap;

    public fileUploadThread(FileOfBillWrap fileOfBillWrap) {
        this.fileOfBillWrap = fileOfBillWrap;
    }

    public FileOfBillWrap getFileOfBillWrap() {

        return fileOfBillWrap;
    }

    public void setFileOfBillWrap(FileOfBillWrap fileOfBillWrap) {
        this.fileOfBillWrap = fileOfBillWrap;
    }



    @Override
    public void run() {
        //上传文件到什么地方以及后续操作
    }

}

下载文件线程




/**
 * @author qiumeng
 * @Package com.itrus.laweyecloud.thread
 * @Description:
 * @date 2018 2018/1/19 10:47
 */
@Component
public class fileDownThread implements Runnable {

    private static Logger log = Logger.getLogger(fileDownThread.class);



    private FileOfBill fileOfBill;

    private fileDownThread() {
    }


    public fileDownThread(FileOfBill fileOfBill) {
        this.fileOfBill = fileOfBill;
    }

    public FileOfBill getFileOfBill() {
        return fileOfBill;
    }

    public void setFileOfBill(FileOfBill fileOfBill) {
        this.fileOfBill = fileOfBill;
    }



    @Override
    public void run(){
          //下载文件到什么地方以及后续操作
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值