๋น๋๊ธฐ๋ ํ์ฌ ์คํ ์ค์ธ ๋ช
๋ น์ด ์ข
๋ฃ๋์ง ์์๋ ๋ค์ ๋ช
๋ น์ด ์คํ ๊ฐ๋ฅํ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
Callback ํจ์๋ฅผ ํตํด ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. (ex) Ajax, Thread
class User {
private int userNo = 0;
// ์๊ณ ์์ญ์ด ๋์ด์ผํ๋ ๋ฉ์๋
public void add(String name) {
System.out.println(name + " : " + userNo++);
}
}
class UserThread extends Thread {
User user;
UserThread(User user, String name) {
super(name);
this.user = user;
}
public void run() {
try {
for (int i = 0; i < 3; i++) {
user.add(getName());
sleep(500);
}
} catch(InterruptedException e) {
System.err.println(e.getMessage());
}
}
}
public class SyncThread {
public static void name(String[] args) {
User user = new User();
// 3๊ฐ์ ์ค๋ ๋ ๊ฐ์ฒด ์์ฑ
UserThread p1 = new UserThread(user, "A");
UserThread p2 = new UserThread(user, "B");
UserThread p3 = new UserThread(user, "C");
// ์ค๋ ๋ ์ค์ผ์ค๋ง : ์ฐ์ ์์ ๋ถ์ฌ
p1.setPriority(p1.MAX_PRIORITY);
p2.setPriority(p2.NORM_PRIORITY);
p3.setPriority(p3.MIN_PRIORITY);
p1.start();
p2.start();
p3.start();
}
}
// ๊ฒฐ๊ณผ => ์์ ๋ค์ฃฝ๋ฐ์ฃฝ
A : 0๋ฒ์งธ ์ฌ์ฉ
B : 1๋ฒ์งธ ์ฌ์ฉ
C : 2๋ฒ์งธ ์ฌ์ฉ
A : 3๋ฒ์งธ ์ฌ์ฉ
C : 5๋ฒ์งธ ์ฌ์ฉ
B : 4๋ฒ์งธ ์ฌ์ฉ
C : 7๋ฒ์งธ ์ฌ์ฉ
A : 6๋ฒ์งธ ์ฌ์ฉ
B : 8๋ฒ์งธ ์ฌ์ฉ
๋๊ธฐ๋ ํ ์์์ ๋์์ ์ ๊ทผํ๋ ๊ฒ์ ์ ํํ์ฌ ์์ฐจ์ ์ผ๋ก ์งํ๋๋๋ก ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋ค์์ ์คํ๋ ๋ช
๋ น์ ํ์ฌ ์คํ ์ค์ธ ๋ช
๋ น ์ข
๋ฃ ์๊น์ง ๋๊ธฐํ๊ณ ๋๊ธฐ์๊ฐ์ด ๋ฐ์ํ์ฌ ๋ฒํผ๋ง์ด ์๊ธธ ์ ์์ต๋๋ค.
์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ๋์์ ์ด๋ฃจ์ด์ง๋ ํํ๋ก, ํ๊ธ ์ธ์ถ๊ธฐ์ ๊ฐ์ด ์๊ฐ์ ์ธ ๋๊ธฐํ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค.
Java์์ synchronized
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉํฐ ์ค๋ ๋ ์ ๊ทผ ์ ํ์ ํ ์ ์์ต๋๋ค.
public synchronized void add(String name) {
System.out.println(name + " : " + userNo++);
}
๋ฉ์๋, ๋ธ๋ก ๋จ์๋ก ์ ์ฉ์ด ๊ฐ๋ฅํ๊ณ , ๋ฉ์๋ ๋จ์๋ก ์ง์ ํ ๊ฒฝ์ฐ ๋ฉ์๋ ์ ์ฒด์ lock์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์๊ณ ์์ญ์ด ๋๋ฌด ์ปค์ ๊ฐ๋ฅํ๋ฉด ๋ธ๋ก ์์ญ์ ํ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๐ก Synchronized Collection์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
List ๋์ Vector, Map ๋์ HashTable ๋ฑ synchronized ํค์๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋ Collection๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ์ง๋ง ์ด Collection๋ค์ ์ ๊ณตํ๋ API๊ฐ ์ ๊ณ ์ฑ๋ฅ์ด ์ข์ง ์์ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ์๋ Collections๋ผ๋ util ํด๋์ค์์ ์ ๊ณต๋๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
synchronizedList(), synchronizedSet(), synchronizedMap() ๋ฑ์ด ์กด์ฌํฉ๋๋ค.
JDK 1.7 ๋ถํฐ concurrent package๋ฅผ ํตํด ConcurrentHashMap์ด๋ผ๋ ๊ตฌํ์ฒด ๋ํ ์ ๊ณตํฉ๋๋ค.
์ด๋ Collections util ๋ณด๋ค synchronized ํค์๋ ์ ์ฉ ๋ฒ์๊ฐ ์ข์์ ๋ณด๋ค ์ข์ ์ฑ๋ฅ์ ๋ผ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์
๋๋ค.