您的位置:首页 > 编程语言 > Java开发

异步简单例子

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));   

 方法里面没啥浪费时间的方法,因此有时候会不是那么明显 ,如果业务稍稍复杂点,这个就变得无限明显。
  好吧,第一次博客之旅 到此结束。 接受各种砖块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息