私はGWTをかなり使い慣れています。以前はJavaサーブレットを使ったことがありませんでした。私はRPCを作成する方法を知っていますが、RPCのServiceImpl/RemoteServiceServletクラスでメンバー変数を宣言する際に並行性の問題があるのだろうかと思いました。私。同じ変数を上書きする複数の「同時」RPCから、変数がvolatile宣言されていないときのスレッドと同じようになります。GWTサーバサイドコードの変数
サーブレットのメンバーの一部を静的なものとして宣言して、他のスレッドがアクセスできるように問題があるかどうか疑問に思っていたので、サーバー側のコードで余分なスレッドを使用する必要がありました。サーブレットインスタンスへの参照を持たない変数同じRemoteServiceServletクラスの複数のインスタンスが同時に実行される可能性はありますか?
など。
public class MyServiceImpl extends RemoteServiceServlet implements MyService {
// Which of these variable declarations are a bad idea in a servlet?
private String someVariable;
private static String anotherVariable;
volatile private static String multiThreadedVariable;
public void init() { ... }
...
}
ありがとうございます。
です。私はそれらを必要とすると思いますが、どうすればそれらへのアクセスを同期できますか?変数をvolatileとして宣言するか、synchronizedキーワードをMyServiceのRPCメソッドに追加する、通常のマルチスレッドアプリケーションと同じ方法ですか? – Doval
他のJavaアプリケーションと変わりません。その変数を使用しているメソッドを同期させることも、コードブロックを同期させることもできます。実際の同期を行わずに 'volatile'(またはそれ以外のもの)を使用しても、スレッドセーフの問題は解決されません。 – Vladimir
public static synchronized changeMultiThreadedVariable(){ここではmultiThreadedVariableで何かを実行}は – Vladimir