2017-02-06 12 views
0

Windowsフォルダ上のファイルの移動/作成が、そのパス上のファイルを使用してタスクのタイミングの問題を引き起こしている状態がある実行可能なタスクでThread.sleepがファイルの作成/移動を完了するのを待っている

私は、Windowsが動作するまでThread.sleep(30ms)を使用してそのタスクを実行しているデーモンスレッドをスリープ状態にしており、FileNotFoundExceptionなしで正常に動作することができます。

初期クラス

Thread t = new Thread (processTask); 
t.setdaemon(true) 
t.start(); 

Taskクラス

class ProcessTask() extends Runnable 
    { 
    Files.move(source, destination, copyoption); 
    Thread.sleep(30ms); //to wait for windows to complete move 
    new FileInputstream(sourceFile); 
    } 

必ず睡眠だけで私の現在のデーモンスレッド用(30ミリ秒)をのThread.sleepでしょうか?睡眠がどこで行われているかを確認する方法がありますか?

+0

あなたのコードは矛盾しています。 'source'から' destination'に移動した場合、後でソースを開くことができないことは明らかですが、 'sourceFile'は操作にまったく関与しない変数です。さらに、 'FileInputstream'はNIOとは異なるライブラリコードを使用します。 'destination'はあなたが実際に開きたいものを表す' Path'であると仮定して、代わりに 'Files.newInputStream(destination)'を試してみます。 – Holger

答えて

2

Thread.sleep()は現在のスレッドに影響します。他のスレッドをスリープ状態にすることはありません。

ただし、Thread.sleep()を使用することは、プログラムロジックには使用しないでください。特に、他のアクションが完了するのを待っているとき。それらは通知メカニズムで処理され、無作為な量を待つことなく、すべてがうまくいくことを期待してください。

関連する問題