2017-12-11 6 views
0

응용 프로그램 java 및 장면 빌더를 수행 중이므로 newScheduledThreadPool(1)을 작성합니다. 버튼을 클릭하면 다음에 버튼을 다시 클릭하면 실행 프로그램이 일시 중지되어야하고 버튼을 다시 클릭하면 실행 프로그램이 다시 시작됩니다. newScheduledThreadPool을 일시 중지하는 방법은 무엇입니까?

내 코드입니다 : 대한

public class ExecutorThreadReadDatabase { 
static Logger logger = MyLog4J.getInstance(); 
private static boolean stopThread ; 
private static ExecutorThreadReadDatabase executorThreadReadDatabase; 
private ScheduledExecutorService executor; 
public ExecutorThreadReadDatabase() { 
    executor = Executors.newScheduledThreadPool(1); 
} 
public static ExecutorThreadReadDatabase getInstance() { 
    if (executorThreadReadDatabase == null) { 
     logger.info("null");  
     return new ExecutorThreadReadDatabase(); 
    } else { 
     logger.info("not nullo"); 
     return executorThreadReadDatabase; 
    } 
    } 

public void readToDatabaseFromNetworkServer() { 
    logger.info("lo stop è : "+stopThread); 
    executor.scheduleAtFixedRate(RunnableThread.getInstance(), 0, 5, 
TimeUnit.SECONDS); 
} 
public void stopT() { 
    logger.info("stoppo l' executor"); 
    executor.shutdown(); 
    executor.wait() 
} 

죄송합니다 나의 나쁜 영어

+0

"잠시 멈추다"라는 뜻은 무엇입니까? 예정된 실행을 건너 뛰는 것을 의미합니까? –

+0

예, 다시 버튼을 누르기 전까지 –

답변

1

나는이 작업을 수행하는 가장 쉬운 방법은이 ExecutorThreadReadDatabase에 플래그를 "일시 정지"유지하고 Runnable을 래핑하는 것이라고 생각한다 다른 Runnable의 집행자에게 제출하여 실행하기 전에 일시 중지 된 플래그의 값을 확인하십시오.

public class ExecutorThreadReadDatabase { 
    private volatile boolean paused = false; 

    // ... 

    public void readToDatabaseFromNetworkServer() { 
    logger.info("lo stop è : "+stopThread); 

    RunnableThread rt = RunnableThread.getInstance(); 
    Runnable r = new Runnable() { 
     @Override public void run() { 
     if (paused) return; 
     rt.run(); 
     } 
    }; 

    executor.scheduleAtFixedRate(r, 0, 5, TimeUnit.SECONDS); 
} 
+0

음, 아니요, 집행자와 그의 스레드는 기다리지 않아도됩니다. –

+1

이것은 문자 그대로 메모에 명시된대로 수행됩니다. 즉, 예약 된 실행을 건너 뛰기를 원합니다. (그리고 당신의 의견은 여기에 맞지 않습니다. 나는 두려워합니다. 영어가 모국어가 아니라는 것을 알고 있지만, 당신이하고 싶은 말을 분명히해야합니다.) –

+0

예, 죄송합니다, :(나는 집행자가 버튼을 다시 누르기 전까지 메모리를 사용하지 않을 것입니다. 실행자 인터럽트 일정과 조건이 확인되면 다시 시작합니다. –