java.util.concurrent里面不是有么,为啥要自己写?
挑战自我么?

解决方案 »

  1.   

    executor[执行器] 去了解一下,已经很完善的线程池和任务管理机制
      

  2.   

    问题一: 
    public void execute(Runnable[] task) {  
            synchronized (taskQueue) {  
                for (Runnable t : task)  
                    taskQueue.add(t);  
                taskQueue.notify();  
            }  
        }   
    你线程池中的线程都同步taskQueue,当你添加一个线程的时候notify只能激活一个线程,此时会使整个线程一直工作
    问题2:
    ynchronized (taskQueue) {  
                        while (isRunning && taskQueue.isEmpty()) {// 队列为空  
                            try {  
                                taskQueue.wait(10000);  
                            } catch (InterruptedException e) {  
                                e.printStackTrace();  
                            }  
                        }  
                        if (!taskQueue.isEmpty())  
                            r = taskQueue.remove(0);// 取出任务  
                    }  
                    if (r != null) {
                    
                     new Thread(r).start();
    你在线程池线程中启动新的线程,这个不符合线程池的工作原理吧,线程池是使用线程池中的空闲线程执行任务,以便于管理线程,一般是在空闲线程中直接执行任务,而不应用创建新的线程
    另外
    你工作线程的写法容易让当前线程一直执行,建议你看看线程池方面的网上示例
      

  3.   


    ExecutorService threadPool = Executors.newFixedThreadPool(5);//通过这样可以构造一个线程池,这是一个固定线程数量为5的线程池
    threadPool.execut(Runnable task);//这样让线程去执行runnable