我想使用一个公共线程池,它可以在我的应用程序的任何地方使用。我是否应该在主类中创建一个静态执行器服务。那就在需要的地方使用它?目前,我在我的主要类(MyMainApplication.java)中有这个
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
public static final ThreadPoolExecutor getExecutor(int corePoolSize, int maxPoolSize, int keepAlive) {
如果我使用Executor框架在java中创建一个具有10个线程的固定大小的线程池:
private final ExecutorService pool;
pool = Executors.newFixedThreadPool(10);
然后尝试提交10个以上的任务(例如,12个任务);
for (int i = 0 ; i < 12 ; i++) {
pool.execute(new Handler(myRunnable));
}
额外的任务(根据12个任务的示例额外的两个任务)会发生什么?它们是否会被阻塞,直到线程完成其工作?
我想执行以下算法-这必须在Java中完成
for(int i = 0; i< 100; i++){
create 8 threads which perform a task
wait for all threads to finish
}
最好不要因为开销(以及每个线程的工作时间小于20毫秒)而连续创建和销毁线程,这带来了线程池的想法。我还知道使用可执行文件,可以先调用shutdown,然后调用awaitTermination。然而,在这种情况下,由于循环的原因,这是不可取的。那么线程同步是如何发生的呢?
我想同步线程池中的线程,就像使用传统线程的join()方法一样。
您可以看到,我们在这里使用的是我们自己的内部连接池,而不是commons.dcbp连接池,因此更改服务器xml中的连接设置不会做任何事情。处理测试/删除陈旧连接的最佳方法是什么?是在getConnection()方法中执行验证查询更好,还是在一段时间后从连接池中删除连接更好(您将如何做到这一点)?
//working connection
[18 Mar 23:19:01] (ajp-nio-8701-exec-5) INFO : pconn: com.peregrine.esf.jdbc.PoolableConnection@782d14dd pconn.isStreamOpen(): t
我很抱歉,我从python中学到了多进程,并且我在理解Java的方法时遇到了一些问题。在python中,我可以说我想要一个由4个进程组成的池,然后向我的程序发送一堆工作,它将一次处理4个项目。我意识到,在Java中,我需要使用线程来完成同样的任务,到目前为止,它似乎工作得非常好。
但是,与python不同,我的cpu利用率不是100% (大约是70-80%),我怀疑这就是我创建线程的方式( python/java之间的代码是相同的,进程是独立的)。在Java中,我不确定如何创建一个线程,所以我为列表中要处理的每个项创建了一个线程,如下所示:
for (int i = 0; i <