Java 7 理解 Phaser

Java 7 理解 Phaser

ID:37710408

大小:47.99 KB

页数:5页

时间:2019-05-29

Java 7 理解 Phaser_第1页
Java 7 理解 Phaser_第2页
Java 7 理解 Phaser_第3页
Java 7 理解 Phaser_第4页
Java 7 理解 Phaser_第5页
资源描述:

《Java 7 理解 Phaser》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Java7引入了一个全新灵活的线程同步机制,名为Phaser。如果你需要等待线程结束然后继续执行其他任务,那么Phaser是一个好的选择,接下来我们一步步来介绍Phaser的使用:首先看下面的代码:?12345678910111213141516171819202122232425262728293031323334importjava.util.ArrayList;importjava.util.Date;importjava.util.List;importjava.util.concurrent.Phaser; publicclassPhaserExample{  publi

2、cstaticvoidmain(String[]args)throwsInterruptedException{   Listtasks=newArrayList<>();   for(inti=0;i<2;i++){    Runnablerunnable=newRunnable(){    @Override    publicvoidrun(){     inta=0,b=1;     for(inti=0;i<2000000000;i++){      a=a+b;      b=a-b;     }    }   };    tasks.add(run

3、nable);   }   newPhaserExample().runTasks(tasks);  }  voidrunTasks(Listtasks)throwsInterruptedException{ 3536373839404142434445464748495051525354555657  finalPhaserphaser=newPhaser(1){   protectedbooleanonAdvance(intphase,intregisteredParties){    returnphase>=1

4、

5、registeredParties==0

6、;   }  };   for(finalRunnabletask:tasks){   phaser.register();   newThread(){    publicvoidrun(){     do{      phaser.arriveAndAwaitAdvance();      task.run();     }while(!phaser.isTerminated());    }   }.start();   Thread.sleep(500);  }   phaser.arriveAndDeregister(); } }这个例子让我们可以深入了解Phaser的使

7、用,下面是对这个代码的分析:Line8-27: main 方法创建了两个Runnable任务Line29:任务列表当作参数传递给runTasks方法runTasks 方法实际使用了一个Phaser用于同步任务,使得每个任务在并行执行之前必须先到达屏障(Barrier)。列表中的任务执行了两次,执行情况如下图所示:注意:"party"是Phaser中的一个术语,相当于是线程的意思,当一个party到达,就是线程到达意思就是线程到了同步的屏障(Barrier)。Line35:createa Phaser thathasoneregisteredparty(thismeans:atthi

8、stimephaserexpectsonethread=partytoarrivebeforeitcanstarttheexecutioncycle) Line36:implementthe onAdvance-Methodtoexplainthatthistasklistisexecutedtwice(doneby:Line37saysthatitreturnstrueifphaseisequalorhigherthen1) Line41:iterateoverthelistoftasks Line42:registerthisthreadwiththe Phaser.Notic

9、ethata Phaser instancedoesnotknowthetaskinstances. It'sasimplecounterofregistered,unarrivedandarrivedparties,sharedacrossparticipatingthreads. Iftwopartiesareregisteredthentwopartiesmustarriveatthephasertobeabletostartthefirstcycle. Lin

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。