synchronized
-
이번 포스트에서는 스레드의 장점 중 하나인 데이터의 공유와 이와 연관된 동기화 문제를 살펴보자. 데이터 공유와 동기화 데이터 공유멀티 스레드 프로그램의 장점 중 하나는 힙의 데이터를 공유한다는 점이다. 다음의 그림은 Account 라는 객체를 출금 스레드 2개와 입금 스레드 2개가 공유하고 있는 모습을 보여준다. 4개의 Account를 만들 필요 없이 하나의 객체가 사용되므로 효율적일 수 있다. 출금을 위한 뱅킹 시스템Account 객체는 잔금인 balance와 출금, 입금을 위한 withdraw, deposite 메서드를 갖는다. 문제는 출금 과정이 복잡해서 주토피아에 나오는 나무늘보처럼 살짝 느리게 동작한다고 생각해보자.package ch14.banking;public class Account {..
[Thread] 03.데이터의 공유와 동기화이번 포스트에서는 스레드의 장점 중 하나인 데이터의 공유와 이와 연관된 동기화 문제를 살펴보자. 데이터 공유와 동기화 데이터 공유멀티 스레드 프로그램의 장점 중 하나는 힙의 데이터를 공유한다는 점이다. 다음의 그림은 Account 라는 객체를 출금 스레드 2개와 입금 스레드 2개가 공유하고 있는 모습을 보여준다. 4개의 Account를 만들 필요 없이 하나의 객체가 사용되므로 효율적일 수 있다. 출금을 위한 뱅킹 시스템Account 객체는 잔금인 balance와 출금, 입금을 위한 withdraw, deposite 메서드를 갖는다. 문제는 출금 과정이 복잡해서 주토피아에 나오는 나무늘보처럼 살짝 느리게 동작한다고 생각해보자.package ch14.banking;public class Account {..
2024.07.05 -
다음의 무거운 작업을 수행해야한다고 생각해보자. public long heavyWork(int th) { long result = 1; for (int i = 0; i < Integer.MAX_VALUE; i++) { result += i; } System.out.printf("%d th done: %d\n", th, result); return result; } 위의 작업을 총 10번 해서 총 결과를 알고 싶다면 아래와 같이 작업할 수 있다. public void getSumByNormal() { long first = System.currentTimeMillis(); long result = 0; for (int i = 0; i < 10; i++) { result += heavyWork(i); } l..
Thread의 join 사용 예다음의 무거운 작업을 수행해야한다고 생각해보자. public long heavyWork(int th) { long result = 1; for (int i = 0; i < Integer.MAX_VALUE; i++) { result += i; } System.out.printf("%d th done: %d\n", th, result); return result; } 위의 작업을 총 10번 해서 총 결과를 알고 싶다면 아래와 같이 작업할 수 있다. public void getSumByNormal() { long first = System.currentTimeMillis(); long result = 0; for (int i = 0; i < 10; i++) { result += heavyWork(i); } l..
2019.08.03