의문점 공부하기 102

📌 runnable과 callable의 차이는 무엇일까??

Runnable: Runnable은 Java 1.0에서 도입된 함수형 인터페이스 동시에 실행될 수 있는 작업을 나타내지만 결과를 반환하지 않는다 Runnable의 run() 메서드는 인자를 받지 않고 void를 반환한다 run() 메서드 내에서 발생한 예외는 run() 메서드 외부에서 잡거나 처리할 수 없다 Runnable runnable = () -> { // 작업 수행 System.out.println("Runnable 작업 실행"); }; Thread thread = new Thread(runnable); thread.start(); Callable: Callable은 java.util.concurrent 패키지의 일부로 Java 1.5에서 도입된 함수형 인터페이스 동시에 실행될 수 있는 작업을 나..

📌 스레드 만드는 방법!!!!

Thread 클래스를 상속받기 Thread 클래스를 상속받아 새로운 클래스를 정의하고, run() 메소드를 오버라이딩하여 스레드가 실행할 작업을 정의한다. 그리고 해당 클래스의 객체를 생성하고 start() 메소드를 호출하여 스레드를 시작한다 class MyThread extends Thread { public void run() { // 스레드가 실행할 작업 정의 } } public class Main { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); } } Runnable 인터페이스를 구현하기 Runnable 인터페이스를 구현하는 클래스를 정의하고, run() 메소드를 구현하여 스레드가..

📌 데몬 스레드는 무엇일까??

데몬스레드는 백그라운드에서 실행되는 스레드 → 일반적인 스레드와는 다르게, 데몬스레드는 메인 스레드가 종료되면 자동으로 종료된다 데몬스레드는 보조적인 작업을 수행하거나 백그라운드에서 지속적으로 실행되어야 하는 작업을 처리하는 데 사용된다 ex) 가비지 컬렉션, 자동 저장, 로그 기록 등의 작업 데몬스레드는 setDaemon(true) 메서드를 사용하여 생성할 수 있다. 이 메서드를 호출하여 스레드를 데몬스레드로 설정하면, 해당 스레드는 메인 스레드가 종료될 때 자동으로 종료된다

📌 스레드와 프로세스의 차이는 뭘까?

프로세스(Process): 프로세스는 운영체제에서 실행되고 있는 프로그램의 인스턴스 각 프로세스는 독립된 메모리 공간을 할당받고, 자신만의 주소 공간을 가지고 실행된다 한 프로세스는 다른 프로세스의 변수나 자료구조에 직접 접근할 수 없다. 프로세스 간에는 프로세스 간 통신(IPC, Inter-Process Communication)을 통해 데이터를 주고받을 수 있다. 프로세스는 여러 개의 스레드로 구성될 수 있다. 프로세스는 운영체제로부터 시스템 자원을 할당받는 작업의 단위 스레드(Thread): 스레드는 프로세스 내에서 실행되는 여러 실행 흐름 한 프로세스 내에서 스레드들은 같은 주소 공간과 자원(힙 공간 등)을 공유하면서 실행된다 같은 프로세스 안에 있는 스레드들은 같은 힙 공간을 공유한다 한 스레드..

🧾 스레드를 재사용해야 하는 이유

스레드가 데드가 되면 사용 못하지만 다시 사용할 수 있게 해주면 되지 않나?? => 실행완료된 스레드는 가비지가 된다 가비지 컬렉터가 가비지가된 스레드 수집하여 해제 시키기 전까지는 그 스레드를 위해 할당된 메모리를 사용 할 수없다 스레드를 매번 만들면 결국 가비지만 계속 늘어나게 되고 => 메모리 낭비!!!!!!!!!! 스레드는 실제 OS가 생성하고, 스레드는 생성하는데 시간이 걸림 스레드를 자주 생성하면 스레드 생성하는데 시간을 많이 소요하게됨!!! sleep()을 이용한 스레드 재활용 방식은 일정 시간이 지난 후 스레드가 작업하게 만드는 방식 스레드가 잠든 사이에 작업할 내용을 설정해두면, 스레드가 깨어났을 때 변경 사항에 따라 작업을 수행한다. 이 방식으로 한 개의 스레드를 재활용하여 작업을 처리..

🧾 여러 스레드가 공유된 메모리에 접근하여 값을 변경하면????

여러 스레드가 같은 메모리에 접근하여 값을 변경할 때 문제가 발생 →의도된 대로 동작하지 않음 여러 스레드가 동시에 실행할 때 문제가 발생할 수 있는 코드 블럭을 Critical Section 또는 Critical Region이라 칭함 여러 스레드가 같은 메모리를 동시에 접근해도, 메모리 조회만 하면 문제 없는데 이를 스레드 안전이라 부른다 해결책은? => synchronized 키워드를 사용, 한 번에 한 스레드만 해당 메서드 또는 블록에 진입할 수 있다 다른 스레드는 진입한 스레드가 해당 메서드나 블록의 실행을 마칠 때까지 기다려야 한다 public synchronized void criticalMethod() { // Critical Section // 동기화가 필요한 작업 수행 } =>코드 블록에..

📌 병렬과 동시성의 차이점은?!

병렬성(Parallelism): 병렬 처리는 여러 개의 작업을 동시에 실행하는 것을 의미 -여러 개의 독립적인 처리 장치 또는 CPU에서 각각의 작업을 처리하며, 작업들은 동시에 시작하고 종료할 수 있다. - 병렬 처리는 계산 속도를 높이고 처리량을 향상시키는 데 사용된다 동시성(Concurrency): 동시성은 여러 작업을 동시에 실행하고 관리하는 행위 - 동시성은 단일 처리 단위 또는 순차 처리를 사용하여 시스템의 응답 시간을 줄이는 데 사용 - 작업들은 동시에 시작되지만, 동시에 처리되는것은 아니다. - 동시성은 CPU에서 프로세스의 인터리빙 작업과 컨텍스트 스위칭을 통해 이루어진다 병렬성은 여러 개의 작업을 동시에 실행하며, 병렬 처리 장치 또는 CPU에서 각각의 작업을 처리한다, 작업들은 동시에..

📌 iterator와 listIterator의 차이는 무엇일까?

Iterator와 ListIterator는 자바에서 컬렉션 요소를 반복하는 데 사용되는 인터페이스 Iterator는 단방향으로만 이동할 수 있으며, ListIterator는 양방향으로 이동할 수 있다. Iterator는 hasNext()와 next() 메서드를 사용하여 다음 요소로 이동한다 ListIterator는 hasNext(), next(), hasPrevious(), previous() 메서드를 사용하여 다음 요소 또는 이전 요소로 이동할 수 있다. ListIterator는 List 인터페이스를 구현하는 컬렉션에서만 사용할 수 있다. ListIterator는 List 인터페이스에만 정의되어 있기 때문에, List를 구현한 ArrayList, LinkedList 등에서만 사용할 수 있다. Itera..

📌 iterator란 무엇일까?

Iterator란 자바에서 컬렉션 프레임워크에 저장된 요소들을 순회하여 읽어오는데 사용되는 인터페이스 Iterator를 사용하면 어떤 컬렉션 프레임워크라도 읽어볼 수 있는 표준화된 방법을 제공한다. Iterator 인터페이스는 다형성을 구현하고자 하기 때문에 for 루프나 while 루프와 같은 제어문과 함께 사용된다 EX) import java.util.ArrayList; import java.util.Iterator; public class IteratorTest { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("봄"); list.add("여름"); list.add("가을"); list.add("..

📌 thread-safe 컬렉션 클래스들은 무엇이 있을까?

Thread-safe 컬렉션 클래스는 멀티 스레드 환경에서 동기화를 보장하는 클래스 이러한 클래스들은 여러 스레드가 동시에 접근하여 수정하거나 조회할 수 있으며, 동시에 접근하는 스레드들이 안전하게 사용할 수 있도록 보호한다 왜 Thread-safe한 컬렉션 클래스를 사용하는가? 멀티 스레드 환경에서 데이터의 일관성을 유지하기 위해 동시에 접근하는 스레드들이 안전하게 데이터를 수정하거나 조회할 수 있도록 보호하기 위해 Thread-safe 컬렉션 클래스 Vector: 동기화된 메서드를 사용하여 스레드 안전성을 보장하는 List 구현체 Stack: 동기화된 메서드를 사용하여 스레드 안전성을 보장하는 LIFO(Last-In-First-Out) 구조의 컬렉션 클래스 Hashtable: 동기화된 메서드를 사용하..