๐ŸŒ WEB/JAVA

๋‚ด๊ฐ€ ๋ณด๋ ค๊ณ  ์ •๋ฆฌํ•˜๋Š” JAVA ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ 1 - ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๊ฐœ๋…

์• ์ •์“ฐ 2021. 9. 13. 21:17

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์œ„์˜ ๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น์ด๋ผ๋ฉด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์—์„œ์˜ ๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋Š” ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

1. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ• ํ•ด์„œ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณณ์—์„œ ์‚ฌ์šฉ

2. UI๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

3. ๋‹ค์ˆ˜ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ


- ๋ฉ”์ธ ์Šค๋ ˆ๋“œ

๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—… ์Šค๋ ˆ๋“œ๋ณด๋‹ค ๋จผ์ € ์ข…๋ฃŒ๋˜๋”๋ผ๋„ ์ž‘์—… ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณ„์† ์‹คํ–‰ ์ค‘์ด๋ฉด ํ”„๋กœ์„ธ์Šค๋Š” ์ข…๋ฃŒ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

- ์ž‘์—… ์Šค๋ ˆ๋“œ

๋ช‡ ๊ฐœ์˜ ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ณ  ๊ฐ ์ž‘์—…๋ณ„๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

                                                                                          (์ž‘์—…1)   (์ž‘์—…2)

(ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ž‘์—…์„ ๊ฒฐ์ •)  ->  ๋ฉ”์ธ์Šค๋ ˆ๋“œ  ์Šค๋ ˆ๋“œ1   ์Šค๋ ˆ๋“œ2

Threadํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ๊ฐ์ฒดํ™”ํ•ด์„œ ์ƒ์„ฑํ•ด๋„ ๋˜์ง€๋งŒ, ์ƒ์†ํ•ด์„œ ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

์ด์ œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…์‹œ๋‹ค!

 

1. Thread ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

 

Thread thread = new Thread(Runnable target);

์œ„์™€ ๊ฐ™์ด Runnable์„ ๋งค๊ฐœ๊ฐ’์œผ๋กœ ๊ฐ–๋Š” ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

Runnable์€ ์ž‘์—… ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋Œ€์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

class Task implemets Runnable{
	public void run(){
    	์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ํ•  ์ฝ”๋“œ
        }
  }

run() ํ•˜๋‚˜๊ฐ€ ์ •์˜ ๋˜์–ด ์žˆ๋Š”๋ฐ. ์ด๊ฒƒ์„ ์žฌ์ •์˜ํ•˜์—ฌ ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

ํ•˜์ง€๋งŒ ์ž‘์—… ๋‚ด์šฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ด์ง€ ์‹ค์ฒด ์Šค๋ ˆ๋“œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. Runnable ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ํ›„ 

 

Thread thread = new Thread(์—ฌ๊ธฐ์—)

 

์œ„์™€ ๊ฐ™์ด Thread์ƒ์„ฑ์ž๋กœ ํ˜ธ์ถœํ•ด์•ผ๋งŒ ๋น„๋กœ์†Œ ์ž‘์—… ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์ต๋ช… ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๊ด€ํ•ฉ๋‹ˆ๋‹ค.

Thread thread = new Thread(new Runnable(){
	public void run(){
    	์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ํ•  ์ฝ”๋“œ
	}
});

 

Runnable ์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ•จ์ˆ˜์  ์ธํ„ฐํŽ˜์ด์Šค๋ผ๊ณ  ํ•˜๋Š”๋ฐ. ์ด๋Ÿฌํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋žŒ๋‹ค์‹์„ ๋งค๊ฐœ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (Java 8 ์ด์ƒ)

Thread thread = new Thread(()->{
	์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ํ•  ์ฝ”๋“œ
} );

thread.start() 

๋ฉ”์ธ์Šค๋ ˆ๋“œ -> ์Šค๋ ˆ๋“œ ๊ฐ์ฒด ์ƒ์„ฑ -> start() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ -> ์ž‘์—… ์Šค๋ ˆ๋“œ ์‹คํ–‰ / ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ์‹คํ–‰

 

2. Thread ํ•˜์œ„ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ

 

Runnable๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์ง์ ‘ Thread์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ์ž‘์—… ์Šค๋ž˜๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด Thread์˜ run ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๋ฉด ๋œ๋‹ค. 

public class Work extends Thread{
	@Override
    public void run(){
    	// ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ํ•  ์ฝ”๋“œ
	}   
 }
 
 Thread thead = new Work();

 

์•„๋ž˜์™€ ๊ฐ™์ด ์ต๋ช… ์ž์‹ ๊ฐ์ฒด๋กœ ์ฝ”๋“œ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.

Thread thread = new Thread(){
    @Override
    public void run() {
        
    }
};

์Šค๋ ˆ๋“œ์˜ ์ด๋ฆ„

ํ•„์ˆ˜์ ์ธ ์—ญํ• ์„ ํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ๋””๋ฒ„๊น…ํ•  ๋•Œ ์–ด๋–ค ์Šค๋ ˆ๋“œ๊ฐ€ ์–ด๋–ค ์ž‘์—…์„ ํ•˜๋Š”์ง€ ํ™•์ธ ํ•  ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” "main" ์ด๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ง์ ‘ ์ƒ์ƒํ•œ ์Šค๋ ˆ๋“œ๋Š” ์ž๋™์œผ๋กœ "Thread-n" ์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์„ค์ •๋œ๋‹ค.

๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” 

thread.setName("์Šค๋ ˆ๋“œ ์ด๋ฆ„") ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์Šค๋ ˆ๋“œ์˜ ์ด๋ฆ„์„ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ๋Š”

thread.getName() ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

* ๋งŒ์•ฝ Thread ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด Thread.currentThread() ๋ฅผ ํ†ตํ•ด ์ด๋ฆ„์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

public static void main(String[] arg){
	// Thraed ์ฐธ์กฐ ํ•˜๊ณ  ์žˆ์ง€ ์•Š์Œ
    Thread mainThread = Thread.currnetThread();
    mainThread.getName();
    
    // Thraed ์ฐธ์กฐ ํ•˜๊ณ  ์žˆ์Œ
    ThraedA thraedA = new Thraed(){
    	@Override
        public void run(){
    		setName("TheadA");
        }
    }
    threadA.getName();
    ThreadA.start();
    
   }

 

์Šค๋ ˆ๋“œ ์šฐ์„ ์ˆœ์œ„

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋Š” ๋™์‹œ์„ฑ or ๋ณ‘๋ ฌ์„ฑ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

๋™์‹œ์„ฑ - ๋ฉ€ํ‹ฐ ์ž‘์—…์„ ์œ„ํ•ด ํ•˜๋‚˜์˜ ์ฝ”์–ด์—์„œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ์‹คํ–‰ํ•œ๋‹ค.

๋ณ‘๋ ฌ์„ฑ - ๋ฉ€ํ‹ฐ ์ž‘์—…์„ ์œ„ํ•ด ๋ฉ€ํ‹ฐ ์ฝ”์–ด์—์„œ ๊ฐœ๋ณ„ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•œ๋‹ค.

 

 

์‹ฑ๊ธ€ ์ฝ”์–ด CPU๋ฅผ ์ด์šฉํ•œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋Š” ๋ณ‘๋ ฌ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์‚ฌ์‹ค์€ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ์‹คํ–‰ํ•˜๋Š” ๋™์‹œ์„ฑ ์ž‘์—…์ด๋‹ค.

์›Œ๋‚™ ๋น ๋ฅด๋‹ค๋ณด๋‹ˆ ๋ณ‘๋ ฌ์ ์œผ๋กœ ๋ณด์ผ ๋ฟ!

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์–ด๋–ค ์ˆœ์„œ์— ์˜ํ•ด ๋™์‹œ์„ฑ์œผ๋กœ ์‹œํ–‰ํ•  ๊ฒƒ์ธ๊ฐ€๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๊ฒƒ์„ ์Šค๋ ˆ๋“œ ์Šค์ผ€์ค„๋ง์ด๋ผ๊ณ  ํ•œ๋‹ค. 

 

์Šค๋ ˆ๋“œ ์Šค์ผ€์ค„๋ง์€ ์šฐ์„ ์ˆœ์œ„ / ์ˆœํ™˜ ํ• ๋‹น ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

์šฐ์„ ์ˆœ์œ„ - ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ๋” ๋งŽ์ด ๊ฐ€์ง€๋„๋ก ํ•จ (๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋กœ ์ œ์–ด ๊ฐ€๋Šฅ) 1~10 *1์ด ๋‚ฎ์€์ˆœ

์ˆœํ™˜ ํ• ๋‹น - ์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰์„ ์ •ํ•ด์„œ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์ •ํ•ด์ง„ ์‹œ๊ฐ„๋งŒํผ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค์‹œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ ํ•จ (๊ฐ€์ƒ ๊ธฐ๊ณ„์— ์˜ํ•ด์„œ ์ •ํ•ด์ง ์ฝ”๋“œ๋กœ ์ œ์–ด ๋ถˆ๊ฐ€๋Šฅ)

 

์‚ฌ์šฉ๋ฒ•

1. thread.setPriority(1);

2. thread.setPriority(Thread.MIN_PRIORITY); -> Thread ํด๋ž˜์Šค์˜ ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•