我的任务是创建一个自定义文件备份服务,允许任何使用此服务的笔记本电脑在连接到我们的网络服务器时备份某些目录。我得到的一个要求是,该服务应该基本上优先于用户在该笔记本电脑上的正常活动,而不是阻碍性能......太多。我用Java创建了这个程序,目的是将它作为服务包装在YAJSW中。我知道我可以设置"流程优先级"为低,这将允许:
进程的线程被更高优先级的任何进程的线程抢占。
因此,我认为我会利用每个文件传输的线程,并认为这些线程就是这样做的。我现在有这样的事情:
public void copyFiles() {
for (ScannedFile file : filesToCopy) {
new Thread() {
@Override
public void run() {
fileCopyUsingStreams(file);
}
}.start();
}
}
但是,我不确定这实际上会按照我的想法运作。我也在考虑作为替代方案,我可以顺序运行这些线程,以期提高优先级产生的机会"。我正在寻找你们都可以借出的任何想法和改进。感谢。
答案 0 :(得分:2)
我觉得你走在正确的轨道上。但是,对于您应该创建多少个线程,会有一个限制。这可能是笔记本电脑,网络I / O或您的服务器上的I / O.我确保以某种方式限制线程数 - 甚至可以配置参数。
在这种情况下,您不必担心Java线程优先级,因为这是JVM中的优先级。