- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图为提交给 ThreadPoolExecutor
的每个 MyRunnable
分配一个编号,但没有成功。
我的代码片段:
import java.util.concurrent.*;
class SimpleThreadFactory implements ThreadFactory {
String name;
static int threadNo = 0;
public SimpleThreadFactory (String name){
this.name = name;
}
public Thread newThread(Runnable r) {
++threadNo;
System.out.println("thread no:"+threadNo);
return new Thread(r,name+":"+threadNo );
}
public static void main(String args[]){
SimpleThreadFactory factory = new SimpleThreadFactory("Ravindra");
ThreadPoolExecutor executor = new ThreadPoolExecutor(1,5,10,TimeUnit.SECONDS,new ArrayBlockingQueue(100),factory);
for ( int i=0; i < 10; i++){
executor.submit(new MyRunnable());
}
executor.shutdown();
}
}
class MyRunnable implements Runnable {
public void run(){
System.out.println("Runnable:"+Thread.currentThread().getName());
}
}
我的期望:
executor.submit(new MyRunnable());
应为执行器上的每个提交调用 ThreadFactory 中的 newThread。但实际上,这种事只发生过一次。
输出:
thread no:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
为什么submit()没有为每个提交的Runnable任务创建新线程?
如何为提交给执行器的每个 MyRunnable 分配序列号?
提前致谢
最佳答案
问题在于 CorePoolSize 和队列之间的交互。
来自Javadoc
"If corePoolSize or more threads are running, the Executor always prefers queuing a request rather than adding a new thread."
和
"If there are more than corePoolSize but less than maximumPoolSize threads running, a new thread will be created only if the queue is full."
因此,目前,您的任务会排队,直到 CorePoolSize 中有空间(即当前正在执行的任务完成时),因此当前您永远不会使用超过 1 个线程。
关于java - ThreadFactory newThread() 方法对于 ThreadPoolExectutor 中的每个submit() 调用仅调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34857723/
在我们的项目中,我遇到了以下方法: Thread t = Executors.defaultThreadFactory().newThread(new MyRunnable(importStarted
我正在尝试使用 Retrofit 和 RxJava 从 api 获取列表并显示在 recyclerview 中。 我使用了下面的代码- ApiInterface apiService =
我在普通的 JDK 8 上。我有这个简单的 RxJava 示例: Observable .from(Arrays.asList("one", "two", "three")) .doOnNext(wo
有人可以帮助解释为什么当我“阻塞并继续”观察者的 onNext 序列订阅了一个具有时间可观察序列的缓冲区时,Scheduler.NewThread 不再适用吗? 例如: 如果我通过缓冲一个数字序列 v
我试图为提交给 ThreadPoolExecutor 的每个 MyRunnable 分配一个编号,但没有成功。 我的代码片段: import java.util.concurrent.*; class
我正在使用 RxJava2 Android Networking 进行网络调用。我面临的问题是,当我尝试通过 Schedulers.io() 访问 API 时,有时它没有给出任何响应,而当我尝试使用
在 Retrofit 网络请求中使用 Schedulers.newThread() 与 Schedulers.io() 有什么好处。我见过很多使用 io() 的例子,但我想了解原因。 示例情况: ob
在我的论文中,我正在研究离散事件系统模拟器。模拟由一组 SimulatorThread extends Thread 组成,其操作包括将 Event 调度到 Simulator。每个 Simulato
我是一名优秀的程序员,十分优秀!