私はいくつかのサードパーティのライブラリを使用して、非同期プロトコル経由でサーバーに接続し、応答を返します。たとえば、ユーザー名でユーザーIDを取得する方法は次のようになります。Javaのコールバックと匿名クラスの助けが必要
public int getUserid(String username) {
int userid = 0;
connection.call("getUserid", new Responder() {
public void onResult(final int result) {
System.out.println("userid: " + result);
//how to assign received value to userid and return it?
}
}, username);
//wait for response
while (userid == 0) {
try{
Thread.sleep(100);
} catch (Exception e) {}
}
return userid;
}
問題は、私は(後にそれを返すために)メソッドから変数を「USERID」するために、サーバの応答から返された「結果」を割り当てることができないです。これを解決するには?私はおそらくメソッドの変数ではなく、いくつかのクラス変数に割り当てることができますが、私は同時実行性の問題に対処する必要はないので、メソッドのスコープ内に保持したい。
ありがとうございました。
ありがとうございました。しかし、これを複数回呼び出す必要があります...このValueBoxオブジェクトから読み取ったり書き込んだりするシンクロナイズモデルは何ですか?かなり複雑になるでしょう... – serg
問題は、userIdを処理する前にgetUserIdを複数回呼び出すことができます(たとえば、最初の100msで5回の呼び出しがあったとします)。あなたは物事を上書きする危険性があります。そのような状況で何をしたいですか? – Uri
現在のリクエストが完了するまで、それ以上のリクエストは処理しない可能性があります。 – serg