用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

简单的线程池与任务队列

2012-09-29 作者: 小蜜锋举报

[java]代码库

import java.util.*;
 
/**
 * 简单的线程池与任务队列
 *
 */
public class WorkQueue {
    private final int nThreads;// 线程池的大小
    private final PoolWorker[] threads;// 用数组实现线程池
    private final LinkedList queue;// 任务队列
 
    public WorkQueue(int nThreads) {
        this.nThreads = nThreads;
        queue = new LinkedList();
        threads = new PoolWorker[nThreads];
 
        for (int i = 0; i < nThreads; i++) {
            threads[i] = new PoolWorker();
            threads[i].start();// 启动所有工作线程
        }
    }
 
    public void execute(Runnable r) {// 执行任务
        synchronized (queue) {
            queue.addLast(r);
            queue.notify();
        }
    }
 
    private class PoolWorker extends Thread {// 工作线程类
        public void run() {
            Runnable r;
            while (true) {
                synchronized (queue) {
                    while (queue.isEmpty()) {// 如果任务队列中没有任务,等待
                        try {
                            queue.wait();
                        } catch (InterruptedException ignored) {
                        }
                    }
                    r = (Runnable) queue.removeFirst();// 有任务时,取出任务
                }
                try {
                    r.run();// 执行任务
                } catch (Exception e) {
                    // TODO: handle exception
                }
            }
        }
    }
 
    public static void main(String args[]) {
        WorkQueue wq = new WorkQueue(10);// 10个工作线程
        Mytask r[] = new Mytask[20];// 20个任务
 
        for (int i = 0; i < 20; i++) {
            r[i] = new Mytask();
            wq.execute(r[i]);
        }
    }
}
 
class Mytask implements Runnable {// 任务接口
    public void run() {
        String name = Thread.currentThread().getName();
        try {
            Thread.sleep(100);// 模拟任务执行的时间
        } catch (Exception e) {
            // TODO: handle exception
        }
 
        System.out.println(name + " executed OK");
    }
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...