본문으로 바로가기

계속적인 반복문을 사용할때는 즉, 무한루프를 사용할때 while(true)을 사용하고 

특정 조건에 break; 를 하도록 작성한다.

서버 프로그래밍등에서 while문을 탈출할때 그 객체의 상태를 보고 탈출하는 방법이 있다.


<Loop.java>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
public class Loop {
 
    ExecutorService executorService = Executors.newFixedThreadPool(10);
    private volatile boolean running = true;
 
    // 공유객체를 사용할때 한놈이 계속 바뀌고 한놈은 읽기만 한다면 
// volatile 이걸 붙여줘야함
    // 1. ruuning을 할때 synchronized를 걸거나
    // 2. volatile 한놈은 읽기만 하고 한놈은 쓰기만 할때 이녀석들이 필요
    public void start() {
        executorService.submit(new ChangeLoop(this));
        while (running) {
            try {
                Thread.sleep(1000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("작동");
        }
        executorService.shutdown();
    }
 
    public boolean isRunning() {
        return running;
    }
 
    public void setRunning(boolean running) {
        this.running = running;
    }
 
    public static void main(String[] args) throws InterruptedException {
        Loop loop = new Loop();
        loop.start();
    }
}
 
cs

 

<ChangeLoop.java>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
public class ChangeLoop implements Runnable {
 
    private Loop loop;
 
    public ChangeLoop(Loop loop) {
        this.loop = loop;
    }
 
    @Override
    public void run() {
        try {
            Thread.sleep(10000L);
            loop.setRunning(false);
 
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
 
    }
 
}
 
cs