私はこのようにコードを持っています、
public int handle_refresh(Data mmsg) throws Exception {
String custId = mmsg.getCustomerId();
CustomerThread t = custMap.get(mmsg.getCustomerId());
if (t == null || !t.isAlive()) {
t = (CustomerThread) context.getBean("custT");
t.initThread(mmsg.getCustomerId(), mmsg.getCustomerId(), mmsg.getMessageBody());
custSMap.put(mmsg.getCustomerId(), t);
t.createBufferThread();
t.start();
t.initStreaming();
}
synchronized (t) {
if (null != t) {
ret = t.addSymbols(mmsg);
}
}
return ret;
}
}
ここで、CustomerThreadはcustMapでチェックされます。
マップcustMap=new CustomerThread();
スレッドがcustMapにある場合
1)次に、春の適用コンテキストを読んで取得します。t = (CustomerThread) context.getBean("custT");
2)initThreadメソッドで、顧客ごとに一意のスレッド名を設定します。 t.initThread(mmsg.getCustomerId(), mmsg.getCustomerId(), mmsg.getMessageBody());
3)次に、新しく作成したスレッドをマップに配置します custMap. custSMap.put(mmsg.getCustomerId(), t);
4)次に、createBufferThreadでデータがキャッシュに設定されます。t.createBufferThread();
5)次に、スレッドを新たに開始し、dbからデータを取得します。 t.start();
6)データベース接続を設定します
スレッドがcustMapにない場合
1)synchronized (t) .
2)t.addSymbols()
メソッドを呼び出します。
私の質問は...
1)最初のifブロックは最初にのみ実行され、スレッドが作成されると常に同期(t)が実行されますか?
ブロックが1回だけ実行される場合、上記の1〜6ステップすべてを意味しますか?
2)では、同期(t)は何をしますか?