1

長時間実行されるジョブに対して匿名クラスの実行可能ファイルを実行する一連のワーカースレッドがあります。これらのスレッドは、応答が返された後も長く続きますが、これらのRunnableが作成されたスレッドはまだ存続しており、使用中であると見なされているようです。

実装のために、ここにコードがあります...非常に少ない単語で。

@Path("/myawesomeApp")
public class TheThing {
    static final TheWorkerPool pool = new TheWorkerPool();
    static final HashMap<Integer,String> map = new ConcurrentHashMap<Integer,String>();
    static int mapIdx = 0;

    @Context
    HttpServletContext context;

    @POST
    Integer doStuff() {
        Integer thisVariable = mapIdx++;     
        pool.enqueue(new Runnable() {
            public void run() {
                map.put(thisVariable, OtherStuff.dothings());
            }
        });
    }
}

それらのすべてが次のことに固執しています:

  java.lang.Thread.State: RUNNABLE
    at org.apache.tomcat.jni.Socket.recvbb(Native Method)
    at org.apache.coyote.ajp.AjpAprProcessor.readt(AjpAprProcessor.java:1049)
    at org.apache.coyote.ajp.AjpAprProcessor.readMessage(AjpAprProcessor.java:1140)
    at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:368)
    at org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler.process(AjpAprProtocol.java:378)
    at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509)
    at java.lang.Thread.run(Thread.java:619)
4

1 に答える 1

0

この場合、TheThingのコードはまったく呼び出されないと思います。AjpAprProcessorのソースを参照してください。いくつかの必要なhttpリクエストのヘッダーを読み取ることに固執しています。

したがって、ajpの構成を確認し、クライアントがhttpリクエストを正しく送信することも確認してください。

apache側でロギングを有効にしてみてください。

于 2012-08-28T06:08:14.333 に答える