代码如下:
class test
{
   public static void main(String[] args)
   {  //每次调用程序 新建立一个线程
      classthread ct = new classthread() ;
      ct.start()
   }
}//创线程的类
class classthread extends Thread
{
   public void run()
   {  
      convertvideo cv = new convertvideo() ;
      cv.dothing() ;
   }
}class convertvideo
{  
   //调用方法线程同步
   public synchronized void dothing()
   {
      try
      {
         ProcessBuilder bulider = new ProcessBuilder() ;
         //调用外部程序abc.exe
         builder.command("c:\\abc.exe") ;
         builder.start() ;
      }
      catch(Exception e){}
   }
}大体程序如上,想达到的目地是,不让abc.exe程序进行并发执行,也就是说每次只能执行一个abc.exe实例,可是上边代码的效果是,每当我连续调用n次test类的时候,在进程管理器都会出现n个abc.exe的进程,无法达到想要的效果....请问怎样做才可以呢???  各位大哥高手,帮忙改下上边代码吧,谢谢了~~~~

解决方案 »

  1.   

    你已经是重新运行test类了 新的test对象 在同步方法而言 是一把available lock
      

  2.   

    哦~明白了许多,那兄弟我再请教一下,假如我要根据 前端用户提交的表单来
    动态 创建线程这要如何做呢??既然不是CALL TEST类,那如何 根据用户请求来创建线程呢??  谢谢了~~
      

  3.   

    代码没有任何区别啊!!比如JSP里面
    <%
     new   classthread().start();
    %>
      

  4.   

    不行呀java2000高手,我写了个前端代码 调用classthread.start(),连续用jsp页面反复
    请求了3次  结果发现进程管理器里出现了3个abc.exe的实例,晕4了,呵呵,这是怎么搞的呀
    ??谢谢
      

  5.   

    呵呵!看到了你的问题了!!修改你的调用方式吧!!    Process proc = Runtime.getRuntime().exec("c:\\abc.exe");
        proc.waitFor();
      

  6.   

    Runtime.getRuntime().exec()
    肯定产生一个进程...........而且是一个很恶心的进程,输入 输出 被重置的进程