在java项目中经常需要存在某个后台线程执行相应的功能,比如异步存储,主线程希望能实时接收外来的请求,并将其存入缓存,而后台线程则应该能从缓存中读取数据,并逐步写入到db中。
那么如何实现多线程呢?示例如下:
首先,我们需要定义一个Servlet,并设定其setUp值为1,那么在程序启动时,就会默认启动该Servlet进而执行其对应的init方法,同样滴,在程序退出时则会执行其destory方法。我们用init和destory方法分别调用后台线程的启动方法和停止方法。
private static final int DEFAULT_THREAD_COUNT = 1; //定义默认线程数为1
private ExecutorService service; //关键滴,定义ExecutorService
private Integer threadCount= DEFAULT_THREAD_COUNT; //定义临时变量,存储线程数
public void start(){
logger.info("starting PersistManager thread pool");
service = Executors.newFixedThreadPool(realThread); //给ExecutorService service赋值
for( int i = 0; i < realThread; i++ ) { //注意,这里之所以用for循环,是因为可以指定realThread值,也即如果指定启动多个线程的话,会被这里的for
//循环逐步调用
service.execute(new Runnable() {
@Override
public void run() {
logger.info("message listener has started", );
while( true ) {
persistContent(); //这里的persistContent方法是实现后台异步存储的方法
}
}
});
}
}
}
public void stop(){
logger.info("stoping message listener thread pool");
service.shutdownNow(); //shutdown ExecutorService service
logger.info("message listener thread pool has stoped");
}