본문 바로가기

Java/Java 기초

Thread

1. Thread


(1) 프로그램 : 특정 작업을 수행하는 명령어(소스코드)들의 모음
메모리를 할당받지 않은 상태 -> 꺼져 있다

 

(2)프로세스 : 실행중인 프로그램(작업관리자)
프로세스는 프로그램을 실행시키기 위한 메모리 등의 자원과 쓰레드로 구성된다
즉, 하나의 프로세스는 하나 이상의 쓰레드를 가지고 있다

 

(3) 쓰레드
하나의 프로세스 내에서 작업을 처리하는 흐름을 의미


2. 컴퓨터를 구성하는 3계층


(1) 소프트웨어
어플리케이션 소프트웨어
시스템 소프트웨어
하드웨어

(2) 시스템 자원 : 프로그램을 실행시키기 위해 필요한 것들을 운영체제를 통해 제공받아야한다
제공받는 것들을 의미
하드웨어 자원 : 주기억장치, 보조기억장치, cpu, 입출력장치 등
소프트웨어 자원 : 파일, 기타 소프트웨어 등

 

3. 싱글쓰레드


하나의 쓰레드가 작업을 마치면 프로그램이 종료된다
쓰레드를 하나만 가지고 있기 때문에 작업을 순차적으로 처리하므로 상대적으로 비효율적이다
쓰레드는 자원을 사용하는데 싱글쓰레드는 혼자서 자원을 사용하므로 동기화를 걱정할 필요가 없다
따라서 안정성이 높고 설계가 쉽다
(우리가 메소들르 따로 만들어도 main메소드에서 호출해야 실행되었던 것 -> 싱글쓰레드)


4.멀티쓰레드


메인쓰레드가 작업을 마치더라도 다른 쓰레드의 작업이 모두 끝나야 프로그램이 종료된다
하나의 프로세스에서 여러 작업을 동시에 처리하는 것처럼 느껴지지만 사실은 각각의 쓰레드를 
매우 빠른 속도로 번갈아가면서 실행시켜 조금씩 처리한다
쓰레드간 공유하는 자원이 있다면 충돌이 생겨서 문제가 발생할 수도 있으면 이런 문제를 
동기화(synchronized)를 통해 해결한다
안정성이 떨어지고 설계가 굉장히 어렵다

(1) 멀티쓰레드 구현방법
1) Thread 클래스 상속
2) Runnable 인터페이스 구현

=> run() 메소드에 쓰레드가 처리할 작업을 재정의한다
=> start() 메소드로 쓰레드를 실행시킨다

(2) 쓰레드 이름
디버깅할 때 어떤 쓰레드가 작업을 하는지 조사할 목적으로 주로 사용됨
현재 코드를 어떤 쓰레드가  실행하고 있는지 확인하려면 정적메소드 currentThread()로
쓰레드의 객체의 참조를 얻은 다음 getName() 이름을 출력하면됨

(3) 메인쓰레드 : main
작업쓰레드 : Thread-n의 이름을 가진다
작업쓰레드의 이름을 다른 이름으로 지정하고 싶다면 Thread 클래스의 setName()메소드로 사용하면된다
thread.setName("이름");

(4) 멀티 쓰레드 관련 메소드
1) run() 쓰레드가 호출하는 메소드
2) start() 쓰레드를 실행시키며, run() 메소드를 호출한다
3) sleep(long millis) 매개변수로 전달한 시간동안 쓰레드를 멈춘다
4) join(),join(long millis)
현재 쓰레드의 작업을 멈추고 join을 사용한 쓰레드를 기다린다
매개변수에 값을 전달하지 않으면 현재 쓰레드가 join을 사용한 쓰레드의 작업이 끝날때까지 기다린다
매개변수에 값을 전달하면 해당 시간동안 기다렸다가 다시 현재 쓰레드를 다시 실행한다
보통 먼저 실행시킬 쓰레드에 사용한다

'Java > Java 기초' 카테고리의 다른 글

Set과 Map  (0) 2024.01.04
컬렉션 프레임워크  (0) 2024.01.03
Object , Wrapper 클래  (0) 2024.01.02
예외처리, API  (0) 2023.12.26
내부 클래스, 익명 클래스, 람다식  (0) 2023.12.22