2016-03-15 240 views
-2

我有一个多线程服务器。服务器接受不同客户端的连接。这些客户端定期发送数据。我的服务器有一个标准的多线程代码风格,如线程,运行方法等。但是,当我启动客户端时,它会发送数据,在此过程中,当我启动另一个客户端时,第一个线程停止,第二个线程开始将数据写入其特定文件。换句话说,如何在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(); 
      } 
     } 
    } 
+0

请发表[最小,完整且可验证的示例](http://stackoverflow.com/help/mcve)。 – MikeCAT

+0

如果您从多个线程写入同一文件,则可能会发生损坏,您应该使用文件锁定,或者使用自己的锁定系统来防止此问题。 – Ferrybig

+0

使用多线程可以允许您a)减轻网络延迟或b)如果你有更多的CPU,可以使用更多的CPU电源,但是它不会1)使你的网络上传速度更快2)让你的磁盘更快地旋转。你必须了解你的瓶颈是什么时候使用多线程将会有所作为。 –

回答

0

这是2乳宁线巫通用例U可以个性化它作为u需要,我希望它能帮助

class RunnableDemo implements Runnable { 
    private Thread t; 
    private String threadName; 

RunnableDemo(String name){ 
    threadName = name; 
    System.out.println("Creating " + threadName); 
    } 
    public void run() { 
    System.out.println("Running " + threadName); 
    try { 
    for(int i = 4; i > 0; i--) { 
     System.out.println("Thread: " + threadName + ", " + i); 
     // Let the thread sleep for a while. 
     Thread.sleep(50); 
    } 
} catch (InterruptedException e) { 
    System.out.println("Thread " + threadName + " interrupted."); 
} 
System.out.println("Thread " + threadName + " exiting."); 
} 

public void start() 
{ 
    System.out.println("Starting " + threadName); 
    if (t == null) 
    { 
    t = new Thread (this, threadName); 
    t.start(); 
    } 
} 

} 

public class TestThread { 
public static void main(String args[]) { 

    RunnableDemo R1 = new RunnableDemo("Thread-1"); 
    R1.start(); 

    RunnableDemo R2 = new RunnableDemo("Thread-2"); 
    R2.start(); 
} 
} 
+0

非常感谢。为我工作! –

相关问题