1

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 は起動時に開始され、3001telnet を使用してポート ( ) に接続しようとします。

興味深いことに、ログには次のように表示されます。

  Got a new connection, spawning a thread: 0
  ....

ただし、実際に表示される前に約 48 になります。

  New runnable thread: 0
  ....

待機するのではなく、すぐにスレッド/タスクに取り組むようにSpringを説得するにはどうすればよいですか?

(私は のさまざまな値で試しましたqueueCapacity

4

0 に答える 0