JAVA/Language(50)
-
[Java][Thread] 싱글쓰레드와 멀티쓰레드
1. 싱글쓰레드 프로세스와 멀티쓰레드 프로세스의 차이 싱글쓰레드는 순차적으로 작업들을 처리함 멀티 쓰레드는 여러 작업들을 번갈아 가면서 수행하면서 여러 작업이 동시에 실행되는 것과 같은 효과를 줌 멀티 쓰레드가 싱글 쓰레드보다 느린 경우는 무엇인가? 같은 자원을 가지고 사용하는 작업의 경우에는 싱글쓰레드보다 느릴 수 있음 쓰레드간의 작업 전환(Context Switching)에 시간이 걸림 싱글 쓰레드보다 멀티 쓰레드가 효율적인 경우는 무엇인가? 두 쓰레드가 서로 다른 자원을 사용하는 작업의 경우에는 싱글 쓰레드 프로세스보다 멀티 쓰레드 프로세스가 더 효율적임 예를 들어 사용자로부터 데이터를 입력받는 작업, 네트워크로 파일을 주고받는 작업, 프린터로 파일을 출력하는 작업과 같이 외부기기와의 입출력을 필요..
2022.06.30 -
[Java][Thread] 쓰레드 클래스의 start()와 run() 메서드
1. 왜 쓰레드 클래스의 run() 메서드 대신 start() 메서드를 호출해야 하는가? 일반적으로 쓰레드 인스턴스를 생성하면 쓰레드 클래스에 재정의되어 있는 run() 메서드를 호출합니다. 하지만 실제로 클라이언트에서 호출할때는 start() 메서드를 호출하여 run() 메서드를 실행시킵니다. class MyThread implements Runnable{ public void run(){ ... } } Thread t1 = new Thread(new MyThread()); t1.start(); run() 메서드 대신 start() 메서드를 호출해야 하는 이유는 run() 메서드를 호출하면 호출 스택(callstack)이 생성되지 않고 쓰레드가 독립적으로 수행되지 않습니다. 그러나 start() 메서드..
2022.06.30 -
[Java][Thread] 쓰레드의 구현과 실행
1. 쓰레드를 구현하는 방법 Thread 클래스를 상속하는 방법 Runnable 인터페이스를 구현하는 방법 1.1 Thread 클래스를 상속하는 방법 class MyThread extends Thread{ public void run(){ // Thread 클래스의 run()을 오버라이딩 ... } } MyThread t1 = new MyThread(); t1.start(); 1.2 Runnable 인터페이스를 구현하는 방법 class MyThread implements Runnable{ public void run(){ // Runnable 인터페이스의 run()을 구현 ... } } Thread t1 = new Thread(new MyThread()); t1.start(); 2. 현재 실행중인 쓰레드..
2022.06.28 -
[Java][Thread] 프로세스와 쓰레드
1. 프로세스와 쓰레드는 무엇인가? 프로세스 : 실행중인 하나의 프로그램 쓰레드 : 하나의 프로세스안에서 수행되는 1개 이상의 작은 프로세스(경량 프로세스라고도 부름) 프로세스의 구성 위 그림에서 하나의 프로세스가 하나의 쓰레드를 가지고 있으면 싱글쓰레드 프로세스라고 부르고 쓰레드가 2개 이상이라면 멀티쓰레드 프로세스라고 부릅니다. 2. 멀티태스킹과 멀티쓰레딩 멀티태스킹(MultiTasking, 멀티프로세싱) : 메모리 위에 여러개의 프로세스를 올려두고 실행하는 것을 의미합니다. 멀티쓰레딩(MultiThreading) : 하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행하는 것을 의미합니다. 3. 멀티쓰레딩의 장단점 CPU의 사용률을 향상시킴 자원을 보다 효율적으로 사용할 수 있음 사용자에 대한 ..
2022.06.28 -
[Java][I/O] 직렬화(Serialization)
1. 직렬화란 무엇인가? 직렬화(Serialization)란 객체를 데이터 스트림으로 만드는 것을 뜻합니다. 즉, 객체에 저장된 데이터를 스트림에 쓰기(write) 위해 연속적인(serial) 데이터로 변환하는 것을 의미합니다. 반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화(deserialization)이라고 합니다. 객체의 직렬화와 역직렬화 객체의 정의 및 특징 클래스에 정의된 인스턴스 변수의 집합 객체에는 클래스 변수나 메서드가 포함되지 않음 객체는 오직 인스턴스변수들로만 구성되어 있음 2. ObjectInputStream, ObjectOutputStream 클래스의 정의된 인스턴스 변수가 단순한 기본형일때는 직렬화하여 저장하는 일이 간단하지만 인스턴스 변수의 타입이 참조형일때는 ..
2022.06.28 -
[Java][I/O] 표준입출력과 File
1. 표준입출력 - System.in, System.out, System.err 표준입출력은 콘솔(console, 도스창)을 통한 데이터 입력과 콘솔로의 데이터 출력을 의미합니다. 자바에서 제공하는 표준 입출력 스트림 System.in : 콘솔로부터 데이터를 입력받는데 사용 System.out : 콘솔로 데이터를 출발하는데 사용 System.err : 콘솔로 데이터를 출력하는데 사용 표준 입출력 스트림 클래스 타입 System.in : InputStream System.out : PrintStream System.err : PrintStream 2. 표준입출력의 대상변경 - setOut(), setErr(), setIn() System.in, System.out, System.err의 입출력 대상은 기본..
2022.06.28