私はJavaの初心者で、過去にスレッドを扱ったことがありません。今、私は自分の知識レベルにとって非常にトリッキーな問題を抱えています。
「メール送信」と「メール確認」の2つの機能を開発しました。各ユーザーが自分の好みを登録すると、システムは次のような定期的な作業に関する多くの指示を含む 2 つのカタログを作成します。
A) 1500 ミリ秒ごとにメッセージを送信する
B) 1800 ミリ秒ごとにメッセージを送信する
C) 3000 ミリ秒ごとにメッセージを送信する
A) 2000 ミリ秒ごとにメッセージを確認する
B) 6000 ミリ秒ごとにメッセージを確認する
C) 8000 ミリ秒ごとにメッセージを確認する
スレッドで多くの方法を試しましたが、うまくいきません。私の質問は、それらを同期する最良の方法はどれですか? 以下は、スレッドを使用した最後の努力のコードです。
public class MailCreatorThread extends Thread {
@Override
public void run() {
CreateMail(_date); //creates a mail with _date as subject
}
}
public class GPSThread extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
while (!_isTimeToStop) {
try {
while (_servicesToUpdate.size() == 0) {
Thread.sleep(500);
}
_currentService = (MyService) _servicesToUpdate.get(0)
.clone();
_servicesToUpdate.remove(0);
MailCreatorThread mailCreatorThread = new MailCreatorThread();
mailCreatorThread.start();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class CheckServicesThread extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
while (!_isTimeToStop) {
try {
Thread.sleep(1000);
for (int j = 0; j < _servicesList.length; j++) {
MyService currentService = ((MyService) _servicesList[j]);
if (myService.getTimeToNextUpdate() - 1000 <= 0) {
_servicesToUpdate
.add((MyService) currentService
.clone());
currentService
.setTimeToNextUpdate(currentService
.getUpdatePeriod());
} else {
currentService
.setTimeToNextUpdate(currentService
.getTimeToNextUpdate() - 1000);
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
stopSelf();
}
}