Spring 内 (Tomcat 内) を使用ThreadPoolTaskExecutor
して、ポート ( 3001
) でリッスンする同時サーバーを起動しています。
コードは次のようになります。
....
ServerSocket listener = new ServerSocket(port);
Socket server;
while (true) {
PollingTask pollingTask;
server = listener.accept();
log.info ("Got a new connection, spawning a thread: " + i++);
taskExecutor.execute(new PollingTask(server, i));
}
PollingTask のコードは次のようになります。
....
PollingTask(Socket server, int counter) {
this.server = server;
this.counter = counter;
}
public void run() {
input = "";
try {
log.info ("New runnable thread: " + counter);
}
}
....
Spring の構成は次のようになります。
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="100" />
<property name="maxPoolSize" value="200" />
<property name="queueCapacity" value="50" />
<property name="keepAliveSeconds" value="600" />
</bean>
この特定の Bean は起動時に開始され、3001
telnet を使用してポート ( ) に接続しようとします。
興味深いことに、ログには次のように表示されます。
Got a new connection, spawning a thread: 0
....
ただし、実際に表示される前に約 48 になります。
New runnable thread: 0
....
待機するのではなく、すぐにスレッド/タスクに取り組むようにSpringを説得するにはどうすればよいですか?
(私は のさまざまな値で試しましたqueueCapacity
)