本人开发了一个通用的worker池,功能有二
1、如果你想异步的处理某件事,请将它封装成一个动作对象、丢给worker池就可以了
2、如果你想写一个侦听做某一件事,你只需要告诉worker池:侦听名称、轮询周期、线程数、以及该做什么(将它封装成一个动作对象即可),worker池会为你办好这件事。
worker池的优点是能充分的利用系统资源,集中管理线程,不需要每一个侦听都配置几个线程。将不变的逻辑封装起来,将可变部分(如:具体动作、周期、线程数等)作为参数传入。使用起来非常方便。
你使用的是多线程在处理事务,但你压根就不用和线程直接打交道。
啥也不说了,直接上代码,看怎么用的
package unit;
import com.linkage.bss.crm.asynlaunch.ALSwitch;
import com.linkage.bss.crm.asynlaunch.AsynItem;
import com.linkage.bss.crm.asynlaunch.AsynLaunch;
import com.linkage.bss.crm.monitor.BTask;
import com.linkage.bss.crm.monitor.ListenerMonitors;
import com.linkage.bss.crm.monitor.BTask.BExecutor;
public class TestMain {
/**
* @param args
*/
public static void main(String[] args) {
//1.化同步为异步
//A.同步方式
saySomething("Hello World!");
//B.修改为异步方式
AsynItem item = new AsynItem() {
public boolean launch() {
saySomething("Hello World 2 !");
return true;
}
};
AsynLaunch.asynLaunch(item);
//C.同步方式
saySomething("Hello World 3 !");
//此处输出结果:
/*
Hello World!
Hello World 3 !
Hello World 2 !
*/
//2.侦听功能
//需求:每隔1000ms、5个线程同时 saySomething("Hello-" + 数字)
BTask task = BTask.generate("saySomething Listener",1000,5,new BExecutor() {
int[] arr = {1,2,3,4,5};
public boolean execute() {
int i = (int)(System.currentTimeMillis()%5);
saySomething("Hello - " + arr[i]);
return false;
}
});
ListenerMonitors.put(task);
Sleep(10000);
//关闭缓冲池
ALSwitch.stop();
}
private static void saySomething(String greek) {
System.out.println(greek);
}
private static void Sleep(long ts){
try {
Thread.sleep(ts);
} catch (Exception e) {
}
}
}
有问题请留言