2017-02-06 3 views
0

Windows 폴더의 파일 이동/생성이 해당 경로의 파일을 사용하여 작업을 진행할 때 타이밍 문제가 발생합니다.파일 만들기/이동을 완료하기 위해 창에서 대기중인 실행 가능한 작업에 대한 Thread.sleep의 영향

그래서 Windows가 작동 할 때까지 thread.sleep (30ms)를 사용하여 해당 작업을 실행하는 deamon 스레드를 잠자고 있고 FileNotFoundException없이 정상적으로 실행할 수 있습니다.

초기화 클래스

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

작업 클래스

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

확인 잠 단지 내 현재 데몬 스레드에 대한 (30ms의)를 Thread.sleep를시겠습니까? 수면이 어디에 있는지 확인하는 방법이 있습니까

+0

코드가 모순적입니다. 'source'에서'destination'으로 옮기면 이후에 소스를 열 수 없다는 것이 분명 합니다만,'sourceFile'은 전혀 조작에 관여하지 않는 변수입니다. 게다가,'FileInputstream'은 NIO와는 다른 라이브러리 코드를 사용합니다. 'destination'이 당신이 실제로 열고 자하는 것을 나타내는'Path'라고 가정하면, 대신'Files.newInputStream (destination)'을 시도 할 것입니다. – Holger

답변

2

Thread.sleep() 현재 스레드에 영향을 미칩니다. 다른 스레드를 잠자기 상태로 만들지 않습니다.

그러나 Thread.sleep()을 사용하면 결코 프로그램 논리에 사용하는 것이 좋습니다. 특히 다른 작업이 끝날 때까지 기다릴 때 특히 그렇습니다. 그것들은 통지 메커니즘으로 처리되어야하며, 임의의 양을 기다리지 않고 모든 것이 작동 할 수 있기를 바랍니다.

관련 문제