sychronized이란? java의 키워드이며 메서드에 선언한다. 선언된 메서드는 멀티스레드 상황에서 하나의 스레드만 실행할 수 있다. 아래 예제를 통해 알아보았다. sychronized 사용X 예제Main.javapublic class Main { public static void main(String[] args) throws InterruptedException { Counter counter = new Counter(); Runnable task = new Runnable() { @Override public void run() { for (int i = 1; i 실행 결과결과: 11355 예상한 실..
volatile이란? volatile은 자바의 키워드이며, 변수의 타입 앞에 사용된다. 그리고 선언한 변수를 캐시 메모리가 아닌 메인 메모리를 통해 읽는다. 아래 예제를 통해 알아보았다. volatile을 사용X 예제Main.javapublic class Main { public static void main(String[] args) throws InterruptedException { Task task = new Task(); Thread thread = new Thread(task, "task"); System.out.println("Task.flag = " + task.flag); thread.start(); Thread.slee..
Thread join() 메서드란? A 스레드를 생성한 B 스레드에서 A 스레드가 작업이 완료할 때까지 B 스레드가 대기(WAITING) 상태이며 A 스레드가 작업 완료하면 B 스레드는 실행 중(RUNNABLE) 상태로 되돌린다. 아래 예제를 통해 알아보았다. join() 메서드 사용 X 예제 아래 예제는 main 스레드 내에 두 개의 스레드를 생성했으며 두 개의 스레드는 1부터 n개의 숫자의 합을 구하는 작업을 한다. 그 후 main 스레드에서 두 개의 스레드의 작업한 결과를 더하여 출력하였다. Main.javapublic class Main { public static void main(String[] args) throws InterruptedException { // 스레드 생성..
불변 객체란? 객체의 상태(내부의 값, 멤버 변수)가 변하지 않는 객체를 불변 객체라고 한다. 불변 객체 사용X 예제Book.javapublic class Book { private String name; public Book(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; }}Main.javapublic class Main { public static void main(String[] args) { Book book1 = new B..
