1

次のように機能する、分散する必要のあるシステムがあります。tomcatによって提供されるサーブレットは、多数の共有(分散)フィールドを持つスレッドを起動して生成します。エルゴ、スレッドをルートとして設定し、サーブレットコンストラクタから通常どおりスレッドを生成しようとしました。ただし、ロギングは、共有しようとしているRunnableのコンストラクターが終了しないことを示しています。何が原因でしょうか?

私のサーブレットには、ルートとして共有しようとしているスレッドのインスタンスがあり、ロギングは、runnableを実装するクラスのコンストラクター(UpdaterThread)が終了するまですべてが正常であることを示しています。

私は次のものを持っています:

サーブレット:

印刷"新しいスレッドの作成"; updaterThread = new UpdaterThread(args); 印刷"スレッドを起動します。"; new Thread(updaterThread).start();

これで、Tomcatコンソールの出力に「LaunchingThread」が表示されなくなりましたが、UpdaterThreadコンストラクターの最後まですべてのprintステートメントを表示できます。UpdaterThreadは、マップ(サーブレットによって共有される)、文字列、SQL接続、ステートメント、ReentrantReadWriteLock、Long、および一時的なブール値と共有されないLongへの参照を維持します。

UpdaterThreadのコンストラクターで、共有マップへの参照と文字列の値を渡します。テラコッタを有効にしないと、このポイントを超えることができます。何が原因で、TomcatとTerracottaがエラーメッセージなしでハングするのでしょうか。rrwlロックは、後のメソッドが呼び出されるまで使用されませんが、プログラムの実行ではそれほど遠くまでは行きません。ヘルプ?

4

1 に答える 1

2

解決しました。Terracottaサーバーを再起動する必要がありました。これにより、StatementとConnectionが移植性のないクラスであり、一時的にする必要があることを示すエラーが表示されました。

于 2009-04-07T21:41:49.943 に答える