1、会有很多线程给一个队列上添加任务 2、有一个或者多个线程逐个执行队列的任务 考虑一下几点:1、没有任务时,队列执行线程处于等待状态 2、添加任务时,激活队列执行线程,全部run起来,首先抢到任务的执行,其他全部wait 给个小例子吧 package org;import java.util.LinkedList;import java.util.List...
java队列实现异步执行
在整个思路上要调整一下
1、会有很多线程给一个队列上添加任务
2、有一个或者多个线程逐个执行队列的任务
考虑一下几点:
1、没有任务时,队列执行线程处于等待状态
2、添加任务时,激活队列执行线程,全部run起来,首先抢到任务的执行,其他全部wait
给个小例子吧
package org;import java.util.LinkedList;import java.util.List;public class Queues {public static List<Task> queue = new LinkedList<Task>();/** * 假如 参数o 为任务 * @param o */public static void add (Task t){synchronized (Queues.queue) {Queues.queue.add(t); //添加任务Queues.queue.notifyAll();//激活该队列对应的执行线程,全部Run起来}}static class Task{public void test(){System.out.println("我被执行了");}}}package org;import java.util.List;public class Exec implements Runnable{@Overridepublic void run() {while(true){synchronized (Queues.queue) {while(Queues.queue.isEmpty()){ //try {Queues.queue.wait(); //队列为空时,使线程处于等待状态} catch (InterruptedException e) {e.printStackTrace();}System.out.println("wait...");}Queues.Task t= Queues.queue.remove(0); //得到第一个t.test(); //执行该任务System.out.println("end");}}}public static void main(String[] args) {Exec e = new Exec();for (int i = 0; i < 2; i++) {new Thread(e).start(); //开始执行时,队列为空,处于等待状态}//上面开启两个线程执行队列中的任务,那就是先到先得了//添加一个任务测试Queues.Task t =new Queues.Task();Queues.add(t); //执行该方法,激活所有对应队列,那两个线程就会开始执行啦}}
上面的就是很简单的例子了
2014-11-14
你想问什么呢?判断队列是否有值?取队列中的值?
这两个问题你能完成的话还有啥需要解决呢?跟你以前的需求不一样么?2014-05-26