我有以下代码,其中有3个类
ThreadPoolTest.java
Parent.java(可运行)
Child.java(可运行)
我已经从ThreadPoolTest.java每隔10秒调度一次父线程,一旦启动父线程,在其run()中创建100个子线程。
我的要求是每次启动父线程,我想使用相同的线程执行程序。
目前我已经给出了50的游泳池大小。 在运行时,我想为每个父线程执行更新此池大小。
这可以实现吗?(建议吗?)
如果是,我们怎样才能做到这一点?
public class ThreadPoolTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Parent parent = new Parent();
Thread parentThread = new Thread(parent);
parentThread.setName("Parent");
try {
ScheduledExecutorService executor_instant = Executors.newSingleThreadScheduledExecutor();
executor_instant.scheduleAtFixedRate(parentThread, 0, 10, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class Parent implements Runnable {
private static ThreadPoolExecutor executor;
private static int threadPoolSize = 50;
static {
executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(threadPoolSize);
}
@Override
public void run() {
for (int i = 0; i < 100; i++) {
Child child = new Child();
executor.execute(child);
}
}
}
public class Child implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 3; i++) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
答案 0 :(得分:1)
使用setCorePoolSize(int)
设置新的最小尺寸。
我建议您使用Executors.newCachedThreadPool
,这样,您就可以将创建线程池大小的责任赋予ThreadPoolExecutor
。ThreadPoolExecutor
如果需要执行新任务,则创建新线程,以及使用Executors.newCachedThreadPool()