[Java] ์ค๋ ๋ฉ
์๋ฐ์์ ์ค๋ ๋ฉ์ ๋ด๋นํ๋ ํด๋์ค๋ Thread๋ค.
์๋์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
import java.util.*;
public class Main
{
public static void main(String[] args) throws Exception
{
System.out.println("## ๋ฉ์ธ ์ค๋ ๋ ์์");
var threads = new ArrayList<Thread>();
threads.add(new Thread( ()->System.out.println("์ฒซ๋ฒ์งธ ์ค๋ ๋์") ));
threads.add(new Thread( ()->System.out.println("๋๋ฒ์งธ ์ค๋ ๋์") ));
threads.add(new Thread( ()->System.out.println("์ธ๋ฒ์งธ ์ค๋ ๋์") ));
threads.add(new Thread( ()->System.out.println("๋ค๋ฒ์งธ ์ค๋ ๋์") ));
//์ ๋ถ ์์
for(var thread : threads)
thread.start();
System.out.println("## ๋ฉ์ธ ์ค๋ ๋ ์ข
๋ฃ");
}
}
์ ๋์๊ฐ๊ธด ํ๋๋ฐ ๋ฉ์ธ ์ค๋ ๋๊ฐ ๋๋๊ธฐ๋ ์ ์ ๋๋๋ฒ๋ ธ๋ค.
์ฌ๊ธฐ์๋ ๋ณ ๋ฌธ์ ๊ฐ ์์์ง๋ง, ๋๊ธฐ๋ฅผ ๊ฑธ ํ์๊ฐ ์๋ค๋ฉด Join์ ๊ฑธ์ด๋ฒ๋ฆฌ๋ฉด ๋๋ค.
๊ทธ๋ผ ์ ์ค๋ ๋๋ค์ด ๋ค ๋๋ ๋๊น์ง ๋ฉ์ธ์ค๋ ๋๊ฐ ๋ธ๋ญ๋๋ค.
์ด๋ ๊ฒ.
๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ ๋ ์ด์ค์ ๋ํด ๋ด๋ณด์.
์ฌ๋ฌ ์ค๋ ๋์์ ํ๋์ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ค๋ณด๋ฉด ์ถฉ๋๋ก ์์์น ๋ชปํ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค.
์๋์ ๊ฐ์ด

์ด๊ฑธ ํด๊ฒฐํ๋ ค๋ฉด ๋๊ธฐํ๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
synchronized ํค์๋๋ ๋ฉ์๋๋ ์์์ ๋ก์ปฌ์ ๋ถ์ผ ์๊ฐ ์๋๋ฐ, ๊ทธ๋ฌ๋ฉด ์ ๊ธ์ฉ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ๋ค๊ฐ ๊ทธ๊ฑธ๋ก ์ ๊ธ ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค. ์ ๊ธ์ฉ ๊ฐ์ฒด๋ Object๋ฉด ์๋ฌด๊ฑฐ๋ ๋ค ๋๋ค.
์ด๋ ๊ฒ.
์์์ ์ ๊ธ ํด๋์ค๋ค์ ์จ๋ ๋๋ค.
๋๊ธฐํ ๊ธฐ์ ์ค ํ๋์ธ ์ํธ ๋ฐฐ์ (Mutex)๋ฅผ ๊ตฌํํ ํด๋์ค๋ค์ด ๋ช๊ฐ ์๋๋ฐ, ์ ๋ถ Lock ์ธํฐํ์ด์ค๋ฅผ ์์ํ ํด๋์ค๋ค์ด๋ค. ์ด๋ฆ ๋ค์๋ Lock์ด ๋ถ๋๋ค.
์ด๊ฒ๋ ์ ๋๋ค.
์ทจํฅ๋๋ก ๊ณจ๋ผ์ฐ๋ฉด ๋๋๋ฐ, ๋ณดํต์ synchronized ๋ธ๋ญ์ ์ฐ๋ ๊ฒ์ด ๊ถ์ฅ๋๋๋ฏํ๋ค.