我是Java中的新手,我以前沒有使用過線程。現在我對我的知識水平有一個非常棘手的問題。使用多個實例同步兩個定時器(Java)
我開發了兩個功能「發送郵件」和「檢查郵件」。每個用戶登記自己的喜好和系統創建兩個目錄與定期工作多次批示像
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();
}
}
謝謝! 我試過你的解決方案,它效果很好! – Bilias7 2012-04-19 19:01:24