๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Programming/Java

26 Thread

by Dowon Kang 2024. 1. 21.

์Šค๋ ˆ๋“œ(Thread)๋Š” ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ธ ์‹คํ–‰ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฐ”์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์š” ํด๋ž˜์Šค๋Š” Thread ํด๋ž˜์Šค์™€ Runnable ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๊ฐ„๋‹จํ•œ ์Šค๋ ˆ๋“œ ๊ด€๋ จ ๊ฐœ๋…๊ณผ ์˜ˆ์ œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

 

์Šค๋ ˆ๋“œ ์ƒ์„ฑ๊ณผ ์‹คํ–‰

 

 

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

์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„๋Š” ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•˜๊ฒŒ ๋‹ค๋ค„์ ธ์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„๋Š” ์ •์ˆ˜๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ๋‚ฎ์€ ๊ฐ’์ผ์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค. ์ž๋ฐ”์—์„œ๋Š” Thread ํด๋ž˜์Šค์˜ ์ƒ์ˆ˜๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ’๋“ค์ด ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • Thread.MIN_PRIORITY (1): ๊ฐ€์žฅ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„
  • Thread.NORM_PRIORITY (5): ๊ธฐ๋ณธ ์šฐ์„ ์ˆœ์œ„
  • Thread.MAX_PRIORITY (10): ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„

์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„๋Š” ๋‹ค์Œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •

 

๊ธฐ๋ณธ์ ์œผ๋กœ ์Šค๋ ˆ๋“œ๋Š” ๋ถ€๋ชจ ์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค. ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Thread.NORM_PRIORITY์ž…๋‹ˆ๋‹ค. ๋ถ€๋ชจ ์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ž์‹ ์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„๋„ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

 

 


 

๋™๊ธฐํ™”(Synchronization)

๋™๊ธฐํ™”๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ  ์ž์›์— ๋™์‹œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ์กฐ์ ˆํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๋ฉด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋ฐ”์—์„œ๋Š” synchronized ํ‚ค์›Œ๋“œ์™€ java.util.concurrent ํŒจํ‚ค์ง€์˜ ๋„๊ตฌ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™๊ธฐํ™”๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1) synchronized ํ‚ค์›Œ๋“œ

๋”๋ณด๊ธฐ

public class SharedResource {
    private int counter = 0;

    // synchronized ๋ฉ”์„œ๋“œ
    public synchronized void increment() {
        counter++;
    }

    // synchronized ๋ธ”๋ก
    public void someMethod() {
        synchronized (this) {
            // ์ž ๊ธด ์ฝ”๋“œ ์˜์—ญ
            counter++;
        }
    }
}

 

  • synchronized ํ‚ค์›Œ๋“œ๋Š” ๋ฉ”์„œ๋“œ ๋˜๋Š” ํŠน์ • ๋ธ”๋ก์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ”์„œ๋“œ์— synchronized๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ์†ํ•œ ๊ฐ์ฒด์— ๋Œ€ํ•ด ์ž ๊ธˆ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  • ๋ธ”๋ก์— synchronized๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ž ๊ธˆ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2) Reentrant Lock

  • ReentrantLock ํด๋ž˜์Šค๋Š” synchronized ํ‚ค์›Œ๋“œ์™€ ์œ ์‚ฌํ•œ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ReentrantLock์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์„ธ๋ฐ€ํ•œ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

3) ๋™๊ธฐํ™” ๋ฉ”์„œ๋“œ์™€ ๋ธ”๋ก์˜ ๋Œ€์ƒ

  • synchronized ๋ฉ”์„œ๋“œ์˜ ๋Œ€์ƒ์€ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
  • synchronized ๋ธ”๋ก์˜ ๋Œ€์ƒ์€ ๊ด„ํ˜ธ ์•ˆ์— ๋ช…์‹œ๋œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

๋™๊ธฐํ™”๋Š” ๋ฝ(lock)์„ ์ด์šฉํ•˜์—ฌ ์“ฐ๋ ˆ๋“œ ๊ฐ„์˜ ๊ฒฝ์Ÿ ์ƒํ™ฉ์„ ํ•ด๊ฒฐํ•˜๊ณ , ์ฝ”๋“œ ์˜์—ญ์„ ์ž„๊ณ„ ์˜์—ญ(critical section)์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๋งŒ ์ ‘๊ทผํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณผ๋„ํ•œ ๋™๊ธฐํ™”๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•„์š”ํ•œ ๋ถ€๋ถ„์—๋งŒ ๋™๊ธฐํ™”๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์•ˆ์ „์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋ชจ๋‘ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


 


A thread is a thread of execution in a program. The Java Virtual Machine allows an application to have multiple threads of execution running concurrently. Every thread has a priority. Threads with higher priority are executed in preference to threads with lower priority.

 

Synchronization in computer science refers to coordinating multiple threads or processes to ensure consistent and orderly execution of concurrent tasks, using mechanisms like locks to control access to shared resources and prevent race conditions, ensuring data integrity in a multithreaded or multiprocessing environment.

 

'Programming > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

28 Stream  (0) 2024.01.21
27 Functional Interface (feat. Lambda)  (1) 2024.01.21
25 Generics  (1) 2024.01.21
24 Enum  (0) 2024.01.21
23 Annotation  (1) 2024.01.21

๋Œ“๊ธ€