newScheduledThreadPool,创建一个可间隔时间执行的线程池,并且可以指定数量,以前确实没这么写过,都是写while循环,看来后面我要恶补一下线程池的技术了,下面是我抽出来的部分代码。
package ess.tester;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class MyTest {
private static final long initialDelay = 0;
private static final long period = 500;// 500 millseconds
@Test
public void test0(){
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("scheduledPool-%d").build();
ScheduledExecutorService scheduledPool = Executors.newScheduledThreadPool(2, namedThreadFactory);
scheduledPool.scheduleAtFixedRate(
new Account(),
initialDelay,
period,
TimeUnit.MILLISECONDS
);
Thread t=Thread.currentThread();
t.suspend();
}
class Account implements Runnable{
@Override
public void run() {
log.info(">> 11111111111");
}
}
}
执行结果如下,
12:39:52.390 [scheduledPool-0] INFO ess.tester.MyTest - >> 11111111111
12:39:52.884 [scheduledPool-0] INFO ess.tester.MyTest - >> 11111111111
12:39:53.385 [scheduledPool-0] INFO ess.tester.MyTest - >> 11111111111
12:39:53.885 [scheduledPool-1] INFO ess.tester.MyTest - >> 11111111111
12:39:54.384 [scheduledPool-1] INFO ess.tester.MyTest - >> 11111111111
12:39:54.885 [scheduledPool-1] INFO ess.tester.MyTest - >> 11111111111
12:39:55.385 [scheduledPool-1] INFO ess.tester.MyTest - >> 11111111111
12:39:55.885 [scheduledPool-1] INFO ess.tester.MyTest - >> 11111111111
12:39:56.385 [scheduledPool-0] INFO ess.tester.MyTest - >> 11111111111
12:39:56.885 [scheduledPool-1] INFO ess.tester.MyTest - >> 11111111111
12:39:57.385 [scheduledPool-1] INFO ess.tester.MyTest - >> 11111111111
12:39:57.885 [scheduledPool-1] INFO ess.tester.MyTest - >> 11111111111
12:39:58.385 [scheduledPool-0] INFO ess.tester.MyTest - >> 11111111111
12:39:58.885 [scheduledPool-0] INFO ess.tester.MyTest - >> 11111111111
12:39:59.385 [scheduledPool-1] INFO ess.tester.MyTest - >> 11111111111
12:39:59.885 [scheduledPool-0] INFO ess.tester.MyTest - >> 11111111111
12:40:00.385 [scheduledPool-1] INFO ess.tester.MyTest - >> 11111111111
12:40:00.885 [scheduledPool-1] INFO ess.tester.MyTest - >> 11111111111
12:40:01.385 [scheduledPool-0] INFO ess.tester.MyTest - >> 11111111111
12:40:01.885 [scheduledPool-1] INFO ess.tester.MyTest - >> 11111111111
12:40:02.385 [scheduledPool-1] INFO ess.tester.MyTest - >> 11111111111
12:40:02.885 [scheduledPool-1] INFO ess.tester.MyTest - >> 11111111111
从上面可以看出,就是两个线程每次间隔500毫秒执行,这些都是可以配置的。
最后
扫描下方Q群二维码快速加入Java学习交流群
关注下方‘程序员周刊’微信公共帐号,每周获取最新IT资讯。