Java/Thread4 Thread (4) - 락킹 기법과 데드락 DeadLock 교착상태라고 불리며 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리는 상태를 말합니다. 예제 코드로 살펴보겠습니다. public void Thread1() { lock(A) lock(B) task unlock(B) unlock(A) } public void Thread2() { lock(B) lock(A) task unlock(A) unlock(B) } 스레드 1이 lock(A)를 겁니다. 스레드 2이 lock(B)를 겁니다. 스레드 1이 B에 접근하려고 하자 락이 걸려있어 대기를 합니다. 스레드 2이 A에 접근하려고 하지만 락이 걸려있어 대기를 합니다. 위와 같이 스레드1과 스레드2가 서로 대기 상태에 빠지는것을 데드락, 교착상태라고합니다. 데드락이 일어나는 이유 상호배제 .. Java/Thread 2023. 11. 9. Thread (3) - 스레드 간 데이터 공유의 문제점 및 해결 방법 멀티 스레드 환경의 애플리케이션에서 스레드 간 데이터 공유를 하면 어떤 문제점이 생기고 해결하는 방법에 대해 소개해보겠습니다. 예제 코드 예를 들어 메서드를 호출할 때마다 게임 아이템을 하나씩 늘리고 줄이는 로직 있다고 가정합니다. public class Main { public static void main(String[] args) throws InterruptedException { InventoryCounter inventoryCounter = new InventoryCounter(); IncrementingThread incrementingThread = new IncrementingThread(inventoryCounter); DecrementingThread decrementingThread.. Java/Thread 2023. 11. 7. Thread (2) - 스레드 사용법 및 스레드 간 데이터 공유 스레드의 다양한 생성 방법과 스레드를 연결하는 멀티 스레드를 사용하는 법 및 스레드 간 데이터 공유에 대해 글을 작성해 보겠습니다. 스레드 생성 스레드는 메인 스레드가 종료되어도 실행되고 있는 스레드와 메인 스레드 배경에서 실행되는 데몬 스레드가 있습니다. 즉 일반 스레드는 메인 스레드의 종료를 막고, 데몬 스레드는 막지 않습니다. 익명 클래스사용 Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("Hello thread : " + Thread.currentThread().getName()); } }); thread.start(); 람다식 사용 Thread thread = new Threa.. Java/Thread 2023. 11. 7. Thread (1) - 운영체제 관점에서의 멀티 스레드 운영체제 관점에서의 스레드는 프로세스 위에서 동작하는 task(일)라고 생각할 수 있습니다. 즉 자바 애플리케이션(프로세스)에서 실행되는 코드, 동작하는 일을 스레드라고 할 수 있습니다. public class Main { public void main(String[] args) { System.out.println("Hello World!"); } } 위의 메인 메인 메서드를 실행 시키면 우리는 Hello Wrold라는 출력문을 볼 수 있습니다. 이것은 메인 쓰레드가 위의 코드를 실행시키면서 출력된 것입니다. 이렇게 단일 스레드로도 충분히 애플리케이션을 실행시킬 수 있는데 멀티 스레드는 왜 사용할까요? 멀티 스레드의 사용 이유 멀티스레드의 사용이유에는 크게 두 가지를 생각할 수 있습니다. 병행성 성능 .. Java/Thread 2023. 11. 7. 이전 1 다음