Thead 中要等待一件事情完成,有什么好的方法? 要时时检测
比如检测一个文件是否存则,如果存在就继续,不在就等待,一直到文件存在位止

解决方案 »

  1.   

    可以这样试试:
    while(true)
    {
     if(文件存在)
      {break;}
     else
     {sleep(一定时间);}
    }
      

  2.   

    主要是这个文件是谁创建的,
    如果是该程序的另外一个线程创建的,可以用wait/notify。
    如果是其它进程创建,那也只能pooling了。
      

  3.   

    这个文件是这个线程运行Runtime.getRuntime().exec(...), 被调用的外部分程序启动一个新的进程.文件是有这个进程生成的. (这边调用的是在linux用运行java classname).不知道怎么pooling?
      

  4.   

    同意kingfish(八百里秦川@龙城异客) 的说法:这是等待自己开的进程的办法:
    Process process=Runtime.getRuntime().exec("xxxx");
    process.waitFor(); //主进程就等在这里了,直到process退出。
      

  5.   

    to  takecare(大厅) 
    用process waitfor()是等不到外部进程运行完毕的.
      

  6.   

    如果是同Jvm推荐使用wait/notify机制。如果不是同jvm或者根本就是别的进程(非java程序)生成,那就要用sink() 的代码了。
      

  7.   

    建议使用wait,notify机制。但是如果没有修改源码的权限就只有轮询了。呵呵,轮询也是一个常见的办法。
      

  8.   

    为什么process.waitFor()等不到外部进程运行完毕呢?这里运行外部进程和文件判断是在同一个线程里进行的,waitFor()结束后,直接判断文件是否存在就可以了,为什么有多线程的问题?
      

  9.   

    只是不太明白,waitFor方法在Process类中的声明是abstract的,为什么可以直接调用呢?谁给解释一下?
      

  10.   

    to chongkai,确实Process类是抽象类,但是runtime.exec()是会返回一个Process的子类的实体,既然有实体了,就什么都有啦。to muiz(用户中文昵称),上面的很多回答都已经很清楚了,也有一些示例代码,相信你能使用多种方式达到你的目的的。
      

  11.   

    to takecare(大厅):Process process=Runtime.getRuntime().exec("xxxx");编译器看到的process只是一个Process实例,它不可能知道这是某个Process子类的实例。那么这一行process.waitFor(); 怎么能编译通过呢?虽然我在JB里试了一下,确实没有报错。但我还是糊涂。
      

  12.   

    to chongkai:
    想想OO里多态的思想。