목록분류 전체보기 (278)
개발 무지렁이

𐂂 스레드(Thread) 개수가 폭증하면 CPU가 바빠지고 메모리 사용량이 늘어난다. 병렬작업 증가로 인한 스레드 폭증을 막으려면 스레드풀(ThreadPool)을 사용하는 것이 좋다 스레드풀(ThreadPool)은 작업처리에 사용되는 스레드 개수를 제한해 놓고, 작업 큐(Queue)에 들어오는 작업들을 처리하는 방식을 말한다. 작업량이 증가해도 스레드 개수가 늘어나지 않아 성능저하를 막을 수 있다. 𐁍 스레드풀(ThreadPool) 생성 java.util.concurrent 패키지에서 Executors 클래스의 정적메서드를 이용하여, ExecutorService 인터페이스를 구현한 구현객체를 만들어 생성한다. 🌵 Executors 클래스의 정적메서드 - newCachedThreadPool() : 작업개수..

𐂂 데몬 스레드 주 스레드의 작업을 돕는 보조 역할 스레드 주 스레드가 종료되면 자동종료, TERMINATED. 스레드를 데몬으로 만들기 위해서, 주 스레드에서 해당 스레드 객체를 만들어 setDaemon(true);를 호출하면 된다. 🎯 목적: 자동저장 .. 등에 쓰인다. 📜 AutoSaveThread.java public class AutoSaveThread extends Thread { public void save() { System.out.pritnln("작업 내용을 저장함."); } @Override public void run() { while(true) { try { Thread.sleep(1000); } catch(InterruptedException e) { break; } save()..

𐂂 스레드 불안전 종료 Thread 정적 메서드 stop(): 리소스(파일, 네트워크 연결)들이 불안전한 상태로 남겨진다. 𐁍 interrupt() 메서드 SUSPENDED -> InterruptedException 예외 발생 run() 메서드를 정상실행종료 (리소스를 정리하고, TERMINATED) ⚠️ 스레드가 RUNNABLE or RUNNING일 때, interrupt() 메서드가 호출되어도 InterruptedException이 발생하지 않는다. 𖠃 Thread.interrupted() 및 objThread.isInterrupted() interrupt() 메서드 호출 여부 boolean 리턴 boolean status = Thread.interrupted(); //정적메서드 boolean sta..

𐁍 스레드 동기화 멀티스레드는 공유객체에 서로 접근할 수 있다. 다른 스레드에 의해 공유객체의 내부데이터가 쉽게 변경되기 때문에, 하나의 스레드가 접근할 때, 다른 스레드가 접근하지 못하도록 작업이 끝날 때까지 객체에 잠금(Lock🔒)을 걸어야 한다. (그렇지 않으면 의도치 않은 결과가 나올 수 있다.) 이를 위해, 자바는 동기화 메서드 및 동기화 블록을 제공한다. ➼ 🦔 동기화 메서드 및 동기화 블록 ⚠️ 공유객체 내부에 동기화 메서드 및 동기화 블록을 정의해 놓는다. 🕹️ 동기화 메서드 (동기화 메서드를 실행하는 즉시, 🔒객체잠금이 일어나고, 실행이 끝나면 잠금이 풀린다.) public synchronized void method() { //하나의 스레드만 실행할 수 있는 영역 } 🍫 동기화 블록 (..

➼ 🦔 스레드(Thread) 이름 지정 thread.setName("[스레드 이름]") ⚠️ 스레드 이름을 지정하지 않으면 "Thread-n" ⭐ 어떤 스레드가 현재 코드를 실행하고 있는지 check Thread thread = Thread.currentThread(); System.out.println(thread.getName()); 𐁍 스레드 상태 ⚠️ 스레드 객체를 생성하고, start() 메서드를 호출하면, 바로 스레드가 실행되는 것이 아니다. 실행대기상태(RUNNABLE)로 넘어가고, CPU 스케쥴링에 따라, 해당 스레드가 CPU를 점유할 때 run() 메서드를 실행한다. 이 때 실행상태(RUNNING)가 되며, 스레드는 RUNNABLE과 RUNNING을 번갈아가며 run() 메서드를 조금씩 ..

𐂂 운영체제(os)는 실행중인 프로그램을 프로세스로 관리한다. 운영체제는 멀티프로세스를 생성해서 처리하지만, 하나의 프로세스 내에서 멀티태스킹을 할 수도 있다. 하나의 프로세스가 두가지 이상의 작업을 처리할 수 있는 이유는 멀티스레드가 있기 때문이다. 𐁍 '스레드' 란 코드의 실행흐름을 말한다. 멀티스레드는 하나의 프로세스 내부에서 생성되기 때문에 하나의 스레드가 예외를 발생시키면, 프로세스가 종료되므로 다른 스레드에 영향을 미친다. ⚠️ 멀티스레드를 사용하는 경우 예외처리에 신경써야한다. ⚠️ 멀티스레드에서는 실행 중인 스레드가 하나라도 있다면, 프로세스는 종료되지 않는다. ➼ 🦔 모든 자바 프로그램은 메인스레드가 main메서드를 실행하면서 시작된다. 멀티스레드로 실행하는 프로그램을 개발하려면 먼저, ..