package exercise.exercise14;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
public class TimerExtreme implements Runnable {
AtomicInteger ait = new AtomicInteger(1);
@Override
public void run() {
while (true) {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
System.out.println("current timerTask number is :"
+ ait.get());
ait.addAndGet(1);
}
}, ait.get());
}
}
public static void main(String[] args) throws InterruptedException {
// 启动10个线程去执行任务,每次执行任务都一直创建Timer对象。每个任务都在ait.get()毫秒后执行任务。
ExecutorService exec = Executors.newCachedThreadPool();
TimerExtreme te = new TimerExtreme();
for (int i = 0; i < 10; i++) {
exec.execute(te);
}
exec.shutdown();
Thread.sleep(10000);
System.out.println("TimerTask Extreme :" + te.ait.get());
System.exit(0);
}
}
/*运行结果每次都不同,大概的范围在5100-5400之间。
* TimerTask Extreme :5157
*
* 在JDK里找到相关的说明:
* 实现注意事项:此类可扩展到大量同时安排的任务(存在数千个都没有问题)。
* 在内部,它使用二进制堆来表示其任务队列,所以安排任务的开销是 O(log n),其中 n 是同时安排的任务数。
* */
JAVA编程思想第四版-多线程的练习答案之练习14
最新推荐文章于 2022-04-10 11:28:13 发布