异步简单例子
来源:互联网 发布:淘宝网被冻结怎么办 编辑:程序博客网 时间:2024/06/05 10:31
异步执行 数据,在现实中很有用,比如点击浏览,数据量大,是否是先提供部分返回,然后交给程序去自动执行呢?这样是不是会有好很多,后台源源不断的插入数据库,前台用户往下翻的时候,自然有数据。当然还有发邮件,发消息等,交给后台去做会好很多。这里简单写个例子。
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));
方法里面没啥浪费时间的方法,因此有时候会不是那么明显 ,如果业务稍稍复杂点,这个就变得无限明显。
好吧,第一次博客之旅 到此结束。 接受各种砖块。
- 异步简单例子
- C#简单异步例子
- AJAX异步提交的简单例子
- linux下异步IO的简单例子
- linux下异步IO的简单例子
- Android handler异步处理简单例子
- java后台简单异步处理例子
- 一个简单的异步验证用户名的例子
- Extjs中加载异步树的最简单例子实现
- 使用$.get()从数据库异步请求数据的简单例子
- 异步上传文件插件-ajaxfileupload.js简单例子
- tornado实现的简单异步调用的例子
- 线程池异步回掉的简单例子
- 使用Guava的eventbus完成异步事件的简单例子
- XMLHTTP异步的例子
- ajax 异步请求例子
- Handle异步例子
- Boost.asio实现的同步、异步TCP通信的简单例子
- java环境变量配置(windows7)
- PHP的namespace关键字小小的疑点解惑
- python爬duitang的摄影类图片
- 由ORA-28001同时带出ORA-28000的解决办法
- OCP-1Z0-051 第102题 TO_DATE,TO_CHAR,TO_NUMBER函数的用法
- 异步简单例子
- 水煮运营商与虚拟运营商未来的争斗
- 遍历Map的四种方法
- WPS专业版序列号
- WindowsXP下搭建GIT服务器
- IIR与FIR的区别 2
- Spring-Data-JPA中出现的异常错误处理
- 旺旺老师JavaSE基础第二章(01)IDE工具
- Apache Traffic Server 4.2.1/5.3.2上的坑!