package com.xiaonei.thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
/**
*
要充分利用java的多线程特性,对于比较耗时,且用户无须等待通知的事件,可以考虑采用异步事件处理,
本文模拟发送邮件,以及一个自动更新的任务调度:
* @author Administrator
*
*/
public class ExecutorsTest {
/**
* 异步事件,发送邮件
*/
private ExecutorService service = Executors.newFixedThreadPool(8);
/**自动更新调度线程*/
private ScheduledExecutorService scService = Executors.newSingleThreadScheduledExecutor();
/**自动更新时间间隔*/
private static final int UPDATE_INTERVAL = 2; //s
private AtomicInteger counter = new AtomicInteger(); //计数器类
private static ExecutorsTest instance = new ExecutorsTest();
public static ExecutorsTest getInstance(){
return instance;
}
private ExecutorsTest() {
startUpdateMoniter();
}
private void startUpdateMoniter(){
scService.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
System.out.println("任务自动更新:"+System.currentTimeMillis()+",次数:"+getNextId());
}
}, UPDATE_INTERVAL, UPDATE_INTERVAL, TimeUnit.SECONDS);
}
public int getNextId(){
return counter.incrementAndGet();
}
/**
* 发送邮件
* @param emails
* @return
*/
public boolean sendMail(String emails){
service.submit(new SendMailsTask(emails));
return true;
}
public static void main(String[] args) {
ExecutorsTest test = ExecutorsTest.getInstance();
System.out.println(test.sendMail("yangxinyan@qq.com"));
}
}
/**
* 异步发送邮件
*/
class SendMailsTask implements Runnable{
String emails = "";
public SendMailsTask(String emails) {
this.emails = emails;
}
@Override
public void run() {
System.out.println("--------发送邮件--:"+emails+Thread.currentThread().getName());
}
}
2
顶
3
踩
分享到:
2012-09-21 11:59
浏览 2080
评论
5 楼
carlosfu
2012-09-22
这么牛啊,昨天发的 800多点击啊。
牛
4 楼
liuInsect
2012-09-22
没看出个什么问题啊、
3 楼
Coolala_cs
2012-09-21
nice!
2 楼
luxing44530
2012-09-21
akka actor?
1 楼
overshit
2012-09-21
我在项目里写了一个类似功能,建议博主吧邮件补全,还有对线程状态进行监控处理,日志系统添加