Callable/Future
CountDownLatch
ExecutorService/Executors
主要是以上几个并发包类的用法、
简单描述下:
Callable/Future : Callable<T>这个接口类似于Runnble接口,要重写里面的call()方法(类似于run方法)具体区别是,call()可以返回值T,run()不能返回、返回的值通过Future.get()获得。
CountDownLatch :这个是一个计时器,主要方法是 await() 和countDown() , await() 是一个阻塞式的,等countDown() 调用完再执行下面的代码。countDown()要调N次,在构造CountDownLatch 的时候,要指定N次。 可以实现一个 总分总 的线程模型。
ExecutorService/Executors: 这个是线程池的内容,大家记住就行,到时候用的时候再查,线程池总类有些多,要根据具体场景才能选择合适自己的池。
下面实例程序,有些长,大家慢慢看,写程序的要静的下心。
/// 描述下场景。
就是5个选手赛跑,每个选手有个能量值,在初始化选手的时候可以给定,值越高,跑得越快。(最高不高过5,不小过0).
主线程可以看作是裁判,他在起跑线上等待5个选手初始化。每个选手初始化完后,在起跑线上$begin.await(); // //等begin.countDown();这条开始命令
begin.countDown();后,每个选手都开始跑了,然后主线程在等着end.await(); // /主线程在这里等他们跑(阻塞式),跑完之后收集他们的结果,然后评出排名.。
当每个选手跑完后,end.countDown()一下,意思是我跑完了。直到5个人都end.countDown()一下后,主线程就执行end.await()方法下面的代码了。就是开始
收集他们的成绩,然后统计,然后输出。