2014-10-30 54 views
-1

我有一个线程使用一些PrintWriter的如何使用进程打开线程?

class NThread implements Runnable { 
    Thread t; 
    PrintWriter w; 

    private volatile boolean running = true; 

    public NThread(int p, PrintWriter w) { 
     t = new Thread(this); 
     this.w = w; 
     t.setPriority(p); 
    } 

    public void run() { 
     while (running) { 
      w.println("Id: " + t.getId()); 
     } 
    } 

    public void stop() { 
     running = false; 
    } 

    public void start() { 
     t.start(); 
    } 
} 

在文件中写的,我尝试使用新的进程中打开这个线程。

public class FileWrite { 
    public static void main(String[] args) { 
     Thread.currentThread().setPriority(Thread.MAX_PRIORITY); 
     Thread ref_mainThread=Thread.currentThread(); 
     try { 
      PrintWriter printWriter = new PrintWriter("C:\\write.txt"); 
      printWriter.println("Id main thread" + ref_mainThread); 
      NThread p1=new NThread(Thread.NORM_PRIORITY + 4,printWriter); 
      Process process1 = new ProcessBuilder("p1",".start()").start(); 
      try { 
       Thread.sleep(1000); 
      } 
      process1.destroy(); 
      printWriter.close(); 
     } 
     catch (IOException e) { 
     System.out.println(e.getMessage()); 
     } 
    } 
} 

我尝试通过两个进程写入一个文件。我如何做到这一点?

+1

在编写程序之前,必须阅读java-doc。 – 2014-10-30 14:19:02

回答

0

Process process1 = new ProcessBuilder(“p1”,“。start()”)。start();

您正在告诉操作系统运行名为“p1”的程序,并将“.start()”作为其第一个命令行参数。

如果你在Linux上,就像在shell窗口中键入“p1 .start”一样。如果你在Windows上,它就像在CMD.EXE窗口中键入一样。无论哪种方式,它都不会做你认为它会做的事。

中的p1是Java程序中的一个变量。它指的是一个可用于启动线程的对象,不会导致名为p1的程序奇迹般地出现在$ PATH中(如果在Windows上,则为%PATH%)。

+0

有什么办法可以解决这个问题吗? – user3660090 2014-10-31 10:41:34

+0

@ user3660090,你还没有说过是什么问题。为什么你想要两个进程?如果您希望在Java中执行类似Unix fork()的系统调用,那么您运气不好。没有Java相当于此。 Java ProcessBuilder类可用于启动另一个进程,但仅限于启动可从Unix shell或Windows CMD提示符启动的进程。如果您编写一个可以从shell/CMD提示符开始的单独程序,那么您可以使用ProcessBuilder从Java程序中启动该程序。 – 2014-10-31 12:16:05

+0

我需要同时在两个进程中写入一个文件。首先,我编写了一个类线程,一次由两个线程一次写入一个文件,但现在我需要在进程上打开这个线程,以在Windows任务管理器上显示此线程。在Java上同时使用两个进程写入一个文件的方法是什么? – user3660090 2014-11-01 19:01:42