我一直在使用 ThreadPoolExecutor 和 Spring,它是 ThreadPoolTaskExecutor。从 JDK 11 开始,没有内置的 ThreadPoolExecutor 和队列支持新线程而不是排队。同样,我找不到任何提供此功能的开源项目。
我想要的是一个 ThreadPoolExecutor 和队列,它将在提交新的 Runnable 时创建新线程,并且一旦达到队列的最大线程数。
我不想设置 coreThreads == maxThreads 因为我有 100 个线程。另外,我不想让所有核心线程都设置AllowCoreThreadTimeOut,因为我希望在提交可运行对象时有一些准备好响应。
是的,我可以使用 SynchronousQueue,但是当我们达到最大线程数并且不排队时,这会拒绝 Runnable。LinkedTransferQueue 可以工作,但需要修改。
我找到的唯一解决方案是:
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(){
private static final long serialVersionUID = 1L;
@Override
protected BlockingQueue<Runnable> createQueue(int queueCapacity) {
BlockingQueue<Runnable> queue = new LinkedTransferQueue<Runnable>() {
private static final long serialVersionUID = 1L;
@Override
public boolean offer(Runnable e) {
return tryTransfer(e);
}
};
return queue;
}
};
executor.setRejectedExecutionHandler(new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, …Run Code Online (Sandbox Code Playgroud) 这是我的问题,我有一个包含50列和10000行的表,所有数据都是字符串.在Swing中,我有一个TableCellRenderer,它呈现整个表的字符串.
在JavaFx中渲染相同的表我创建了50000个TableCell对象.
我在这里遗失了什么吗?这将永远不会有任何性能,分配50K的对象是不可接受的.
JavaFx中是否有一种方法只使用一个TableCell来呈现我的所有单元格并且具有与Swing类似的行为?