java异步跑代码 java实现异步的几种方法( 六 )


(3):想省点工作,可以用BlockingQueue来代替list,这样线程等待和唤醒不用写代码实现了,如果非要用list,那么就做好同步
list的小例子:
Java codeclass MessageConsumer extends Thead {private ListYourMessageType list;private boolean running = true;public MessageConsumer(ListYourMessageType list) {this.list = list;}public void run() {while (running) {YourMessageType msg = null;try {synchronized(list) {while (list.size() == 0) {list.wait();}msg = list.remove(0);list.notiryAll();}} catch (Exception e) {e.printStackTrace();}if (msg == null) continue;//System.out.println(msg); //print message}}}//调用sampleclass ShareModule {ListYourMessageType list = new ArrayListYourMessageType();...}public class Main {public static void main(String[] args) {ShareMudule sm; //so on...Thread t = new MessageConsumer(sm.list);t.start();...}}
java队列实现异步执行在整个思路上要调整一下
1、会有很多线程给一个队列上添加任务
2、有一个或者多个线程逐个执行队列的任务
考虑一下几点:
1、没有任务时java异步跑代码 , 队列执行线程处于等待状态
2、添加任务时java异步跑代码,激活队列执行线程,全部run起来,首先抢到任务的执行,其java异步跑代码他全部wait
给个小例子吧
package org;
import java.util.LinkedList;
import java.util.List;
public class Queues {
public static ListTask queue = new LinkedListTask();
/**
* 假如 参数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{
@Override
public 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; i2; i++) {
new Thread(e).start(); //开始执行时,队列为空,处于等待状态
}
//上面开启两个线程执行队列中的任务,那就是先到先得了
//添加一个任务测试
Queues.Task t =new Queues.Task();
Queues.add(t); //执行该方法,激活所有对应队列,那两个线程就会开始执行啦
}
}
上面的就是很简单的例子了
关于java异步跑代码和java实现异步的几种方法的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读