newscheduledthreadpool java_java 线程池之 newScheduledThreadPool-Go语言中文社区

newScheduledThreadPool 和 其他线程池最大的区别是使用的阻塞队列是 DelayedWorkQueue,而且多了两个定时执行的方法scheduleAtFixedRate和scheduleWithFixedDelay

public ScheduledThreadPoolExecutor(int corePoolSize) {

super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,

new DelayedWorkQueue());

}

b5c3ac2a9b424e1bafcfeddd9b864828.png

示例代码:

public class ScheduledThreadPoolTest {

// 线程数

private static final int threads = 10;

// 用于计数线程是否执行完成

CountDownLatch countDownLatch = new CountDownLatch(threads);

/**

* newScheduledThreadPool execute

*

* @throws ExecutionException

* @throws InterruptedException

*/

@Test

public void test1() throws InterruptedException {

System.out.println("---- start ----");

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(threads);

for (int i = 0; i < threads; i++) {

scheduledThreadPool.execute(new Runnable() {

@Override

public void run() {

try {

System.out.println(Thread.currentThread().getName());

} catch (Exception e) {

System.out.println(e);

} finally {

countDownLatch.countDown();

}

}

});

}

// countDownLatch.await();

System.out.println("---- end ----");

}

/**

* newScheduledThreadPool submit submit

*/

@Test

public void test2() throws InterruptedException {

System.out.println("---- start ----");

ExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(threads);

for (int i = 0; i < threads; i++) {

// Callable 带返回值

scheduledThreadPool.submit(new Thread(new Runnable() {

@Override

public void run() {

try {

System.out.println(Thread.currentThread().getName());

} catch (Exception e) {

e.printStackTrace();

} finally {

countDownLatch.countDown();

}

}

}));

}

countDownLatch.await();

System.out.println("---- end ----");

}

/**

* newScheduledThreadPool submit Callable

*

* @throws ExecutionException

* @throws InterruptedException

*/

@Test

public void test3() throws ExecutionException, InterruptedException {

System.out.println("---- start ----");

ExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(threads);

for (int i = 0; i < threads; i++) {

// Runnable 带返回值

FutureTask> futureTask = new FutureTask<>(new Callable() {

/**

* call

* @return currentThreadName

*/

@Override

public String call() {

return Thread.currentThread().getName();

}

});

scheduledThreadPool.submit(new Thread(futureTask));

System.out.println(futureTask.get());

}

System.out.println("---- end ----");

}

/**

* newScheduledThreadPool scheduleAtFixedRate Callable

*

* @throws ExecutionException

* @throws InterruptedException

*/

@Test

public void test4() throws ExecutionException, InterruptedException {

System.out.println("---- start ----");

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(threads);

for (int i = 0; i < threads; i++) {

scheduledThreadPool.scheduleAtFixedRate(new Runnable() {

@Override

public void run() {

try {

System.out.println(Thread.currentThread().getName());

} catch (Exception e) {

e.printStackTrace();

} finally {

// countDownLatch.countDown();

}

}

}, 0, 3, TimeUnit.SECONDS);

}

countDownLatch.await();

System.out.println("---- end ----");

}

/**

* newScheduledThreadPool submit Callable

*

* @throws ExecutionException

* @throws InterruptedException

*/

@Test

public void test5() throws ExecutionException, InterruptedException {

System.out.println("---- start ----");

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(threads);

for (int i = 0; i < threads; i++) {

scheduledThreadPool.scheduleWithFixedDelay(new Runnable() {

@Override

public void run() {

try {

System.out.println(Thread.currentThread().getName());

} catch (Exception e) {

e.printStackTrace();

} finally {

// countDownLatch.countDown();

}

}

}, 0, 3, TimeUnit.SECONDS);

}

countDownLatch.await();

System.out.println("---- end ----");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值