Memory Visibility
메모리 가시성
1. Volatile
package thread.volatile1;
import static util.MyLogger.log;
import static util.ThreadUtils.sleep;
public class VolatileFlagMain {
public static void main(String[] args) {
MyTask task = new MyTask();
Thread t = new Thread(task, "work");
log("runFalg = " + task.runFlag);
t.start();
sleep(1000);
log("runFalg를 flase로 변경 시도");
task.runFlag = false;
log("runFalg = " + task.runFlag);
log("main 종료");
}
static class MyTask implements Runnable {
boolean runFlag = true;
//volatile boolean runFalg = true;
@Override
public void run() {
log("task 시작");
while (runFlag) {
// runFlag가 false로 변하면 탈출
}
log("task 종료");
}
}
}
1.1. 메모리 가시성 문제
1.2. 메모리 가시성
1.3. Happens-Before
1.4. Java Memory Model(JMM)의 Happens-before 규칙
Last updated