异步简单例子
2014-05-08 17:58
295 查看
异步执行 数据,在现实中很有用,比如点击浏览,数据量大,是否是先提供部分返回,然后交给程序去自动执行呢?这样是不是会有好很多,后台源源不断的插入数据库,前台用户往下翻的时候,自然有数据。当然还有发邮件,发消息等,交给后台去做会好很多。这里简单写个例子。
public class InductionService {
//线程池 具体想了解去看下 //http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/java/util/concurrent/ExecutorService.html
private static ExecutorService pool = Executors.newFixedThreadPool(10);
//内部类 实现 Runnable 接口
class SendNewSystemMessage implements Runnable {
// 普通DO
private IpsDO ipsDO;
public SendNewSystemMessage(IpsDO ipsD0) {
this.ipsDO = ipsD0;
}
@Override
public void run() {
//TODO something to operation work
//这里是随机找一个 等待 ,以便后面TEST 可以真实反映 这个是异步的操作,继续往下看就能明白
if(ipsDO.getNum()==2){
try {
System.out.println("wait......");
this.wait(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("run is end...."+ipsDO.getName());
}
}
public boolean getInsertIps( IpsDO ipsDO){
//线程池submit 方法
pool.submit(new SendNewSystemMessage(ipsDO));
return true;
}
//测试, 少量数据,根据JAVA 执行顺序,你会发现,调用 getInsertIps 方法时, is quick 有机会比cccccccc is 要先返回,它不管里面执行是否完成直接返回, 这就是异步的魅力
public static void main(String args[]){
for(int i=0;i<10;i++){
InductionService ic= new InductionService();
for(int a=0;a<5;a++){
IpsDO ipsDO = new IpsDO();
ipsDO.setName("num"+a +"cccccccc is ----"+a);
ipsDO.setNum(a);
System.out.println(ic.getInsertIps(ipsDO)+" is quick "+a);
}
}
}
}
现在直接给出 测试结果 如下:
true is quick 0
run is end....num0cccccccc is ----0
true is quick 1
true is quick 2
run is end....num1cccccccc is ----1
true is quick 3
true is quick 4
run is end....num4cccccccc is ----4
true is quick 0
run is end....num0cccccccc is ----0
wait......
true is quick 1
run is end....num3cccccccc is ----3
run is end....num1cccccccc is ----1
true is quick 2
wait......
true is quick 3
run is end....num3cccccccc is ----3
true is quick 4
run is end....num4cccccccc is ----4
true is quick 0
run is end....num0cccccccc is ----0
true is quick 1
run is end....num1cccccccc is ----1
true is quick 2
wait......
true is quick 3
run is end....num3cccccccc is ----3
true is quick 4
run is end....num4cccccccc is ----4
run is end....num0cccccccc is ----0
true is quick 0
true is quick 1
run is end....num1cccccccc is ----1
wait......
true is quick 2
true is quick 3
run is end....num3cccccccc is ----3
true is quick 4
run is end....num4cccccccc is ----4
true is quick 0
run is end....num0cccccccc is ----0
true is quick 1
run is end....num1cccccccc is ----1
true is quick 2
wait......
true is quick 3
run is end....num3cccccccc is ----3
run is end....num4cccccccc is ----4
true is quick 4
true is quick 0
run is end....num0cccccccc is ----0
run is end....num1cccccccc is ----1
true is quick 1
true is quick 2
wait......
run is end....num3cccccccc is ----3
true is quick 3
true is quick 4
run is end....num4cccccccc is ----4
true is quick 0
run is end....num0cccccccc is ----0
true is quick 1
run is end....num1cccccccc is ----1
wait......
true is quick 2
true is quick 3
run is end....num3cccccccc is ----3
run is end....num4cccccccc is ----4
true is quick 4
true is quick 0
run is end....num0cccccccc is ----0
run is end....num1cccccccc is ----1
true is quick 1
true is quick 2
true is quick 3
true is quick 4
true is quick 0
true is quick 1
true is quick 2
true is quick 3
true is quick 4
true is quick 0
true is quick 1
true is quick 2
true is quick 3
true is quick 4
wait......
run is end....num3cccccccc is ----3
run is end....num0cccccccc is ----0
run is end....num1cccccccc is ----1
wait......
run is end....num3cccccccc is ----3
run is end....num4cccccccc is ----4
wait......
run is end....num4cccccccc is ----4
run is end....num4cccccccc is ----4
run is end....num3cccccccc is ----3
run is end....num1cccccccc is ----1
run is end....num0cccccccc is ----0
由于执行
pool.submit(new SendNewSystemMessage(ipsDO));
方法里面没啥浪费时间的方法,因此有时候会不是那么明显 ,如果业务稍稍复杂点,这个就变得无限明显。
好吧,第一次博客之旅 到此结束。 接受各种砖块。
public class InductionService {
//线程池 具体想了解去看下 //http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/java/util/concurrent/ExecutorService.html
private static ExecutorService pool = Executors.newFixedThreadPool(10);
//内部类 实现 Runnable 接口
class SendNewSystemMessage implements Runnable {
// 普通DO
private IpsDO ipsDO;
public SendNewSystemMessage(IpsDO ipsD0) {
this.ipsDO = ipsD0;
}
@Override
public void run() {
//TODO something to operation work
//这里是随机找一个 等待 ,以便后面TEST 可以真实反映 这个是异步的操作,继续往下看就能明白
if(ipsDO.getNum()==2){
try {
System.out.println("wait......");
this.wait(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("run is end...."+ipsDO.getName());
}
}
public boolean getInsertIps( IpsDO ipsDO){
//线程池submit 方法
pool.submit(new SendNewSystemMessage(ipsDO));
return true;
}
//测试, 少量数据,根据JAVA 执行顺序,你会发现,调用 getInsertIps 方法时, is quick 有机会比cccccccc is 要先返回,它不管里面执行是否完成直接返回, 这就是异步的魅力
public static void main(String args[]){
for(int i=0;i<10;i++){
InductionService ic= new InductionService();
for(int a=0;a<5;a++){
IpsDO ipsDO = new IpsDO();
ipsDO.setName("num"+a +"cccccccc is ----"+a);
ipsDO.setNum(a);
System.out.println(ic.getInsertIps(ipsDO)+" is quick "+a);
}
}
}
}
现在直接给出 测试结果 如下:
true is quick 0
run is end....num0cccccccc is ----0
true is quick 1
true is quick 2
run is end....num1cccccccc is ----1
true is quick 3
true is quick 4
run is end....num4cccccccc is ----4
true is quick 0
run is end....num0cccccccc is ----0
wait......
true is quick 1
run is end....num3cccccccc is ----3
run is end....num1cccccccc is ----1
true is quick 2
wait......
true is quick 3
run is end....num3cccccccc is ----3
true is quick 4
run is end....num4cccccccc is ----4
true is quick 0
run is end....num0cccccccc is ----0
true is quick 1
run is end....num1cccccccc is ----1
true is quick 2
wait......
true is quick 3
run is end....num3cccccccc is ----3
true is quick 4
run is end....num4cccccccc is ----4
run is end....num0cccccccc is ----0
true is quick 0
true is quick 1
run is end....num1cccccccc is ----1
wait......
true is quick 2
true is quick 3
run is end....num3cccccccc is ----3
true is quick 4
run is end....num4cccccccc is ----4
true is quick 0
run is end....num0cccccccc is ----0
true is quick 1
run is end....num1cccccccc is ----1
true is quick 2
wait......
true is quick 3
run is end....num3cccccccc is ----3
run is end....num4cccccccc is ----4
true is quick 4
true is quick 0
run is end....num0cccccccc is ----0
run is end....num1cccccccc is ----1
true is quick 1
true is quick 2
wait......
run is end....num3cccccccc is ----3
true is quick 3
true is quick 4
run is end....num4cccccccc is ----4
true is quick 0
run is end....num0cccccccc is ----0
true is quick 1
run is end....num1cccccccc is ----1
wait......
true is quick 2
true is quick 3
run is end....num3cccccccc is ----3
run is end....num4cccccccc is ----4
true is quick 4
true is quick 0
run is end....num0cccccccc is ----0
run is end....num1cccccccc is ----1
true is quick 1
true is quick 2
true is quick 3
true is quick 4
true is quick 0
true is quick 1
true is quick 2
true is quick 3
true is quick 4
true is quick 0
true is quick 1
true is quick 2
true is quick 3
true is quick 4
wait......
run is end....num3cccccccc is ----3
run is end....num0cccccccc is ----0
run is end....num1cccccccc is ----1
wait......
run is end....num3cccccccc is ----3
run is end....num4cccccccc is ----4
wait......
run is end....num4cccccccc is ----4
run is end....num4cccccccc is ----4
run is end....num3cccccccc is ----3
run is end....num1cccccccc is ----1
run is end....num0cccccccc is ----0
由于执行
pool.submit(new SendNewSystemMessage(ipsDO));
方法里面没啥浪费时间的方法,因此有时候会不是那么明显 ,如果业务稍稍复杂点,这个就变得无限明显。
好吧,第一次博客之旅 到此结束。 接受各种砖块。
相关文章推荐
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统
- java很神奇 用swing制作欢迎屏幕
- java自动生成验证码插件-kaptcha
- ITeye上“10个人,8个人不会解释这个问题”的帖子
- Java IO与NIO的一些文件拷贝测试
- Java反射随记
- Java简单字符串插值实现