我的任务是创建 C# SDK 的 Java 版本。目前。我正在开发一个扩展 C# System.ServiceProcess.ServiceBase 的类,但由于在 Java 中创建 Windows 服务的困难,我专注于该类中的一些其他方法。
我试图在 Java 中复制的当前 C# 方法如下所示
private void StartProcesses()
{
// create a new cancellationtoken souce
_cts = new CancellationTokenSource();
// start the window timer
_windowTimer = new Timer(new TimerCallback(WindowCallback),
_cts.Token, 0, Convert.ToInt64(this.SQSWindow.TotalMilliseconds));
this.IsWindowing = true;
}
在分析了这部分代码之后,我相信它初始化了一个 System.threading.Timer 对象,该对象每 SQSWindow 毫秒执行一次 WindowCallback 函数。
在阅读了位于的 java.util.concurrent 文档之后
http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/package-summary.html
我不确定如何在 Java 中复制 C# 功能,因为我找不到与 Timer 功能等效的功能。Java 库提供的 TimeUnit 似乎仅用于线程超时,而不用于发出重复操作。
我也很好奇 CancellationTokenSource 的使用。如果要查询此对象以确定操作是否要继续,为什么它不是诸如布尔值之类的原语?它提供了哪些附加功能,Java 的多线程模型中是否有类似的构造?