我有一个多线程服务器。服务器接受不同客户端的连接。这些客户端定期发送数据。我的服务器有一个标准的多线程代码风格,如线程,运行方法等。但是,当我启动客户端时,它会发送数据,在此过程中,当我启动另一个客户端时,第一个线程停止,第二个线程开始将数据写入其特定文件。换句话说,如何在JAVA中使用多线程来写入不同文件的数据?
预期结果:
第一线程的时间--->在FILE1.TXT10秒数据, 第二线程的持续时间--->在FILE2.TXT10秒数据,
实际结果:
第一线程的时间--->只有3在FILE1.TXT10秒数据秒,(I开始第二线程开始第一线程后3秒) 第二线程的持续时间 - - > 10秒钟的数据在f ile2.txt
反之亦然。
我想用多线程编写不同的多个文件。
你能帮我解决这个问题吗?
谢谢。
这里是我的代码:
public void run() {
PrintWriter outputStream = null;
try {
int x=0;
while (runThread) {
FileOutputStream output = new FileOutputStream(getRootDirectory() + fileName, true);
for (int i = 17; i < requestData.length; i++) {
output.write(requestData[i]);
}
output.close();
if (!ServerOn) {
System.out.print("Server has already stopped");
outputStream.println("Server has already stopped");
outputStream.flush();
m_bRunThread = false;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
outputStream.close();
myClientSocket.close();
System.out.println("...Stopped");
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
请发表[最小,完整且可验证的示例](http://stackoverflow.com/help/mcve)。 – MikeCAT
如果您从多个线程写入同一文件,则可能会发生损坏,您应该使用文件锁定,或者使用自己的锁定系统来防止此问题。 – Ferrybig
使用多线程可以允许您a)减轻网络延迟或b)如果你有更多的CPU,可以使用更多的CPU电源,但是它不会1)使你的网络上传速度更快2)让你的磁盘更快地旋转。你必须了解你的瓶颈是什么时候使用多线程将会有所作为。 –