์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ! ๋๋ ์ด๋ฏธ Java์์ ์ผ์๋ฆฌ๋ฅผ ์ฐพ์์์๋ ๋ถ๊ตฌํ๊ณ Javarash์์ ๊ณต๋ถ๋ฅผ ๊ณ์ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๋๋ ๋ ์์ ์ ์ํด ๋งค์ฐ ๊ฒ์ผ๋ฅด๊ฒ, ๊ทธ๋ฆฌ๊ณ ์๋ฐ๊ฐ์ ๋๋ผ๋ฉฐ ์ด ๋ธ๋ก๊ทธ๋ฅผ ์์ฑํฉ๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๊ฒ์ด ์ ์ฉํ๋ค๊ณ ์๊ฐํ๋ฉด ๋งค์ฐ ๊ธฐ์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๋ ๋ฒจ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ์ฐพ๋ ์ฃผ์ ์์ค๋ก ์ฌ์ฉํด์๋ ์๋ฉ๋๋ค.
7. ์ค๋ ๋๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ช ๊ฐ์ง๋ ์๊ณ ์๋์? (์ค๋ ๋, ์คํ ๊ฐ๋ฅ, ํธ์ถ ๊ฐ๋ฅ
1. ์ค๋ ๋ ์ฐ์ ์์๋ ๋ฌด์์ ๋๊น?
์์คํ ์ ๊ฐ ์ค๋ ๋์๋ ๊ณ ์ ํ ์ฐ์ ์์๊ฐ ์์ต๋๋ค. ์ฐ์ ์์๋ ์ค๋ ๋ ๊ฐ์ฒด์ ์๋ 1๋ถํฐ 10๊น์ง์ ์ซ์์ด๋ฉฐ, ๊ฐ์ด ๋์์๋ก ์ฐ์ ์์๊ฐ ๋์ต๋๋ค. ์์คํ ์ ์ฐ์ ์์๊ฐ ๋์ ์ค๋ ๋๋ฅผ ๋จผ์ ์คํํ๊ณ , ์ฐ์ ์์๊ฐ ๋ฎ์ ์ค๋ ๋๋ ๋ ๋ง์ ๊ถํ์ ๊ฐ์ง ์ค๋ ๋๊ฐ ์ ํด ์ํ์ผ ๋๋ง CPU ์๊ฐ์ ๋ฐ์ต๋๋ค. ๋ค์ ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ค๋ ๋ ์ฐ์ ์์๋ก ์์ ํ ์ ์์ต๋๋ค.void setPriority(int priority) //ัััะฐะฝะฐะฒะปะธะฒะฐะตั ะฟัะธะพัะธัะตั ะฟะพัะพะบะฐ.
๊ฐ๋ฅํ ์ฐ์ ์์ ๊ฐ์ MIN_PRIORITY, NORM_PRIORITY ๋ฐ MAX_PRIORITY์
๋๋ค.
int getPriority() // ะฟะพะปััะฐะตั ะฟัะธะพัะธัะตั ะฟะพัะพะบะฐ.
์์ค ์ฐ์ ์์๊ฐ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ์ค๋ ๋๋ ์ฐ์ ์์ 5 - ์ค๊ฐ์ ๋ฐ์ต๋๋ค. ์ค๋ ๋ ์ฐ์ ์์๋ ์์
์ ํฐ ์ํฅ์ ๋ฏธ์น์ง ์์ง๋ง ๋ณธ์ง์ ์ผ๋ก ๊ถ๊ณ ์ฌํญ์
๋๋ค. ์์ํด์ผ ํ ํด๋ฉด ์ค๋ ๋๊ฐ ์ฌ๋ฌ ๊ฐ ์๋ ๊ฒฝ์ฐ Java ์์คํ
์ ์ฐ์ ์์๊ฐ ๋์ ์ค๋ ๋๋ฅผ ๋จผ์ ์์ํฉ๋๋ค. Java ์์คํ
์ ์ ์ ํ๋ค๊ณ ํ๋จ๋๋ ๋๋ก ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์ฐ์ ์์๊ฐ ๋ฎ์ ์ค๋ ๋๋ ์ ํด ์ํ๊ฐ ์๋๋๋ค. ๊ทธ๋ค์ ๋ค๋ฅธ ์ฌ๋๋ค๋ณด๋ค ์๊ฐ์ด ๋ ๊ฑธ๋ฆด ๋ฟ์ด์ง๋ง ์ฌ์ ํ ์ฒํ๋ ๊ฒ์
๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ค๋ ๋๋ ํญ์ ๋์ผํ ์ฐ์ ์์๋ก ์คํ๋ฉ๋๋ค. ํ ์ค๋ ๋์ ๋ค๋ฅธ ์ค๋ ๋๋ณด๋ค ๋ ๋ง์ ์๊ฐ์ ์ฃผ๋ ค๊ณ ํ๋ฉด ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ์ ์ค๋ฅ๋ฅผ ๋ํ๋ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
2. ์ฐ์ ์์๋ฅผ 0์ผ๋ก ์ค์ฌ ์ค๋ ๋๋ฅผ ์ค์งํ ์ ์์ต๋๊น?
์๋์. ๋์ ธ์ง ๊ฒ์ด๋คIllegalArgumentException
3. ThreadGroup ํด๋์ค๊ฐ ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ด๋ค ์ค๋ ๋๊ฐ ์ฐ์์ ์ผ๋ก ๋ชจ๋ ์ค๋ ๋๋ฅผ ์ค์งํ๊ณ ์ค๋จํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด "์ค๋ ๋ ๊ทธ๋ฃน"์ด๋ผ๋ ๊ฐ๋ ์ด ๋์ ๋์์ต๋๋ค. ์ค๋ ๋๋ ์์ ๊ณผ ๋์ผํ ๊ทธ๋ฃน์ ํฌํจ๋ ๋ค๋ฅธ ์ค๋ ๋์๋ง ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.ThreadGroup
์ค๋ ๋ ๊ทธ๋ฃน์ ๊ด๋ฆฌํ๋ ํด๋์ค์
๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์์น ์๋ ๋ณ๊ฒฝ์ผ๋ก๋ถํฐ ์ค๋ ๋๋ฅผ ๋ณดํธํ ์ ์์ต๋๋ค. ๋๋ก๋ 100% ์ ๋ขฐํ ์ ์๋ ์ฝ๋๋ฅผ ์คํํด์ผ ํ ๋๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ์ค๋ ๋๋ฅผ ๋ณ๋์ ๊ทธ๋ฃน์ ๋ฐฐ์นํ๊ณ ๊ธฐ๋ณธ ์ค๋ ๋ ๊ทธ๋ฃน์ ์์
์ ๋ฐฉํดํ์ง ์๋๋ก ๋ฐฉ์งํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค. ์ฆ, ์ค๋ ๋ ๊ทธ๋ฃน์ ๊ด๋ฆฌํ๋ ค๋ฉด
4. ๋ฉ์ธ ์ค๋ ๋๋ ์ด๋ค ์ค๋ ๋ ๊ทธ๋ฃน์ ์ํฉ๋๊น?
main
5. ThreadPool ํจํด์ด๋ ๋ฌด์์ ๋๊น?
์ผ๋ฐ์ ์ผ๋ก ํจํด์ThreadPool
๋ฌธ์ ๊ทธ๋ฃน์ ํด๊ฒฐํ๋ ์ค๋ ๋ ๊ทธ๋ฃน์
๋๋ค. ์์
์ ๋๊ธฐ์ด๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ค๋ ๋๊ฐ ์์
์์
์ ๋ง์น๋ฉด ๋๊ธฐ์ด์ ๋ชจ๋ ์์
์ด ์๋ฃ๋ ๋๊น์ง ๋๊ธฐ์ด์์ ๋ค์ ์์
์ ์์ฒญํฉ๋๋ค. ๊ทธ ํ์๋ ์ ์์
์ด ๋๊ธฐ์ด์ ๋ํ๋ ๋๊น์ง ์ค๋ ๋๊ฐ ์ข
๋ฃ๋๊ฑฐ๋ ์ ์ ๋ชจ๋๋ก ์ ํ๋ ์ ์์ต๋๋ค.
6. ThreadPoolExecutor ํด๋์ค๊ฐ ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ค๋ ๋ ๊ทธ๋ฃน์ผ๋ก ์๋ง์ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์์คํ ๋ฆฌ์์ค์ ๋ญ๋น๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ๊ฐ ์์ ์ ๋ํด ์์ ๋ง์ ์ค๋ ๋๋ฅผ ๋ง๋๋ ๊ฒ์ ๊ทธ๋ฆฌ ํฉ๋ฆฌ์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. Java ์์คํ ์ ๊ฐ ์ค๋ ๋์ ๋ํด ์๋นํ ๋ง์ ๋ฆฌ์์ค๋ฅผ ํ ๋นํฉ๋๋ค. ์ฆ, ์๋ชจ๋ ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ ํ๊ดดํ๋ ๊ฒ์ ์์ ์์ฒด๋ณด๋ค ๋ ๋ง์ ๋ฆฌ์์ค์ ์๊ฐ์ ๋ญ๋นํ ์ ์์ต๋๋ค. Java ๊ฐ๋ฐ์๋ ์ด ๋ฌธ์ ์ ๋ํ ์ฐ์ํ ํด๊ฒฐ์ฑ ์ ์ ์ํ์ต๋๋คThreadPoolExecutor
. ์ด๊ฒ์ ๋ด๋ถ์ ๋ ๊ฐ์ง๊ฐ ์๋ ํด๋์ค์
๋๋ค.
- ํ๋ก๊ทธ๋จ์ ๋ํ๋๋ ์์ ์ ์ถ๊ฐํ ์ ์๋ ์์ ๋๊ธฐ์ด์ ๋๋ค.
- ์ค๋ ๋ ํ(์ค๋ ๋ ๊ทธ๋ฃน) - ์ด๋ฌํ ์์ ์ ์ํํฉ๋๋ค.
7. ์ค๋ ๋๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ช ๊ฐ์ง๋ ์๊ณ ์๋์? (์ค๋ ๋, ์คํ ๊ฐ๋ฅ, ํธ์ถ ๊ฐ๋ฅ
)
public class ThreadsTests {
//ะกะฟะพัะพะฑ 1
static class ThreadExampleRunnable implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}
//ะกะฟะพัะพะฑ 2
static class ThreadExampleFromThread extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}
//ะกะฟะพัะพะฑ 3
static class ThreadExampleFromCallable implements Callable{
@Override
public String call() throws Exception {
return Thread.currentThread().getName();
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
new Thread(new ThreadExampleRunnable()).start(); //ะกะฟะพัะพะฑ 1
new ThreadExampleFromThread().start(); //ะกะฟะพัะพะฑ 2
//ะกะฟะพัะพะฑ 3
ExecutorService service = Executors.newFixedThreadPool(5);
Future task = service.submit(new ThreadExampleFromCallable());
System.out.println(task.get());
}
}
8. Future ํด๋์ค๋ ์ด๋ค ์ฉ๋๋ก ์ฌ์ฉ๋๋์?
์ด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ด ์ด๋ฏธ ์๋ฃ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์๋ ์์ต๋๋ค.boolean cancel(boolean mayInterrupt); // ะััะฐะฝะฐะฒะปะธะฒะฐะตั ะทะฐะดะฐัั.
boolean isCancelled(); //returns true, ะตัะปะธ ะทะฐะดะฐัะฐ ะฑัะปะฐ ะพััะฐะฝะพะฒะปะตะฝะฐ.
boolean isDone(); //returns true, ะตัะปะธ ะฒัะฟะพะปะฝะตะฝะธะต ะทะฐะดะฐัะธ ะทะฐะฒะตััะตะฝะพ.
V get() throws InterruptedException, ExecutionException; //returns ัะตะทัะปััะฐั ะฒัะทะพะฒะฐ ะผะตัะพะดะฐ call or ะบะธะดะฐะตั ะธัะบะปััะตะฝะธะต, ะตัะปะธ ะพะฝะพ ะฑัะปะพ.
9. Runnable์ ๋นํด Callable์ ์ฅ์ ์ ๋ฌด์์ ๋๊น?
์ฌ์ฉํ๋ฉดCallable
์์
์ด ์๋ฃ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์ฝ๊ฒ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.Runnable
GO TO FULL VERSION