TIL 2021.02.25

Kyu·2021년 2월 25일
1

TIL

목록 보기
46/322

🧐 TIL (Today I Learned)

1. Thread

자바는 멀티스레드 프로그래밍 언어이다. 하나의 멀티프스레드 프로그램은 두개나 그 이상의 스레드를 가진다. 그 쓰레들은 동시에 실행가능하며 각 스레드는 서로 다른 ㄴ태스크를 동시에 핸들링할수 있따. 특히 시피유가 여러개 있을때 사용 가능한 리소스를 최적으로 사용할수 있다.

멀티스레딩은 멀티 태스킹 개념을 단일 어플리케이션 내의 특정 작업을 개별 스레드로 세분화할 수 있는 어플리케이션으로 확장한다. 각 스레드는 병렬로 실행이 가능하다.

쓰레드의 생명 주기

스레드는 자신의 생명 주기 동안에 다양한 스테이지를 거친다.

  1. New Thread: 스레드가 새로 만들어진 상태이다. 아직 시작은되지 않았다.
  2. Runnable State: 이 상태는 스레드가 실행중인 상태일수도 있고 대기상태일수도 있고 어떻게 될지 모르는 상태이다.
  3. Blocked/Waiting state: 스레드가 일시적으로 중단된 상태이면 Blocked 이거나 Waiting인 상태이다.
  4. Timed Waiting: 시간대기상태? 이 상태의 스레드는 스레드가 타임아웃 파라미터를 가지는 메서드를 불렀을때 작동한다. (아마도 Thread.sleep?) 타임아웃이 완료되거나 알림을 받게되면 (아마도 다시 Runnable? 상태)로 돌아간다.
  5. Terminated State: 코드가 모두 실행되면 이 상태로 돌아간다. 끝난 상태? 어떤 에러가나서 이 상태로 들어갈수도있다. 예외처리를 하지 않았다던지..말이다

스레드 생성 방법

일단 첫번째로 Thread 를 extend 해서 스레드를 만들 수 있다.

public class Test extends Thread {

    @Override
    public void run() {
        System.out.println("스레드 실행 메서드");
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.start();
    }
}

run()으로 실행하면 그냥 싱글스레드에서 메서드를 실행하는거다
start()라는 메서드로 실행해줘야 스레드가 새로 생성된다.

두번째로 Runnable 를 implement 해서 스레드를 만들 수 있다.

public class Test implements Runnable {

    @Override
    public void run() {
        System.out.println("스레드 실행 메서드");
    }

    public static void main(String[] args) {
        Thread t = new Thread(new Test());
        t.start();
    }
}

이 방법으로 하면 Thread 에 파라미터로 러너블을 구현한 클래스를 넣어주는 생성해야하는 식으로 해야한다.

러너블,스레드 구현의 차이 참고할만한거
그래서 아마 내 예상에는 Runnable은 인터페이스의 특성상 생성자가 없고 객체를 만들 수 없으니,
객체를 만들어 사용하는 용도로 Thread 클래스를 만든 것이 아닐까 싶다. (추정)
영문 웹을 뒤져 이유를 알아내면 수정하겠다.

[Java] Runnable과 Thread의 차이 및 간단한 실행 예제

스레드 메서드들

sleep() 특정시간 자는거
join() 기다린다. 호출한쓰레드가 끝날떄까지
interrupt() 방해하하는거 자고있어도 꺠우는거
isInterrupted() 조건으로 넣어서 인터럽트되면 빠져나옴
yield() 하던일중단하고 양보함
wait()
notify()

참고
Java - Multithreading
Lifecycle and States of a Thread in Java
호눅스의 2/25 강의
07-5 쓰레드(Thread)

읽어볼거리
파이로가 정리한 스레드
호눅스의 수업내용

느낀점

  1. 오늘도 취업이야기가 나왔당 ㅠㅠ 걍 더 열심히 열공해야지 꾸준히하면 어떻게든 되것지~

  2. 코드리뷰~ 나도 조금이나마 참여할수 있어서 좋았다!

  3. 이번 체스 미션5 혼자 해결하긴 넘넘어렵다. 루카스에서 이렇게 힌트를 줄테니 이렇게 구현해보세요~ 라고 하는데 난 잘 어떻게해야할지 감이안와서 참고자료보면서 해결해야겠다 흠 주말에 미션5까지정돈 완료했으면 좋겠따

  4. 벌써 내일이면 또 1주일이지나간다~~시간참빠르네 엄청

  5. 이전에 작성한 내 글을 잘 찾기위해서 키워드를 잘 넣어야겠다는 생각을했다. 태그 넣는것도 그렇고 태그넣는건 검색결과가 많이나왔을때 구체적인 태그이름이 도움이된다. 그리고 구체적인 키워드를 내용안에 삽입하면 원하던 글이 더 잘나온다.

    두가지 리멤버:
    구체적인 이름의 태그, 구체적인 키워드 내용에 삽입 영어같은거

profile
TIL 남기는 공간입니다

2개의 댓글

comment-user-thumbnail
2021년 2월 25일

요즘 열심히 풀리퀘스트에 커멘트 달고 계시던데 열심히 노력하고 계시니 취업도 잘될꺼에요!

1개의 답글