Я использую рабочий поток Swing для связи с остальными службами. Мой сценарий: я вызываю один поток, чтобы получить данные из остальных служб и добавить в свою переменную списка. и еще один поток, чтобы отправить список данных, чтобы сохранить его. Как справиться с этим сценарием с потокобезопасностью
Мой пример кода ниже
private LinkedList<LinkInfo> ***linkInfoList*** = new LinkedList<FlowLinkEntry>();
SwingWorker<LinkInfo, Void> loadLinkInfoThread = new SwingWorker<LinkInfo, Void>() {
@Override
protected LinkInfo doInBackground() throws Exception {
InputStream is = new URL("Http://URL").openStream();
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(is,
Charset.forName("UTF-8")));
LinkInfo linkInfo = (LinkInfo)JsonConverter
.fromJson(reader, LinkInfo.class);
***linkInfoList*** .add(linkInfo);
} finally {
is .close();
}
return linkInfo;
}
}
SwingWorker<Void, Void> saveLinkInfoThread = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
//post data to particular url
//linkInfoList data is posting in this thread
URL url = new URL(http://url);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(***linkInfoList*** );
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
}
}
Мои вопросы
Как хранить данные в linkInfoList в порядке запроса? (т.е.) если я вызываю поток загрузки несколько раз, данные должны быть вставлены в запрос списка.
Как перевести поток сохранения в состояние ожидания, если поток загрузки уже выполняется. Я имею в виду, что если поток загрузки находится в рабочем состоянии, после завершения потока загрузки должен запускаться только поток сохранения.