【发布时间】:2012-04-17 17:11:01
【问题描述】:
我是 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();
}
}
【问题讨论】:
标签: java multithreading sync