我是 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();
}
}