2021. 3. 26. 16:15ㆍJAVA 공부
오늘은 한주의 마지막 평일인 금요일 입니다 ~
대면수업인 날이라서 학원에 출석을 했어요 ㅠㅠ
그리고, 오늘은 학원이 4시에 끝나는 마지막 날이라서 슬픕니다.
그리고 배우고 있는 JAVA도 마지막이라고 해요 ~
오늘은 Thread 쓰레드에 대해서 알아 봅시다
Thread
쓰레드는 프로그램의 실행 흐름 입니다
그런데 이러한 쓰레드는 1개 뿐 아니라 여러개가 존재할 수 있습니다.
예를 들어서, 저희가 사용하는 윈도우가 있습니다. 윈도우에 인터넷을 키고, 게임을 키고, 카카오톡을 키고, 등등 여러가지를 한번에 켜서 사용할 수 있죠?
이러한 기능이 바로 멀티 쓰레드 입니다.
쓰레드의 사용방법을 알아 봅시다.
쓰레드는 2가지 방법으로 사용할 수 있는데,
1. implements Runnable 해서 사용하기
2. extends Thread 해서 사용하기
각각의 사용방법을 한번 알아 봅시다
implements Runnable 을 사용하기
interface 인 Runnable 을 사용하는 것이기 때문에, 오버라이딩을 꼭 해주어야 합니다.
run 이라는 메서드를 오버라이딩 하면 되는데, run()메서드 안에는 실행하고 싶은 코드를 넣어주면 됩니다.
Thread.currentThread() -> 현재 쓰레드를 가져옵니다.
Thread.sleep(value) -> 밀리초 단위로 정지합니다
이렇게 만든 클래스를 Main에서 사용해 봅시다
implements Runnable 을 사용한 경우에는 클래스를 객체화 하고, Thread 클래스도 만들어서, Runnable해준 클래스를 넣어주면 됩니다. "쓰레드 1" 은 쓰레드의 이름을 지정해주는 것을 의미합니다.
쓰레드를 실행시킬 경우에는 start() 를 써주면 됩니다.
실행코드를 보면, 메인이 종료되기 전에 "메인쓰레드 종료" 를 출력하라고 했는데, run() 에 있던 코드가 뒤에 실행이 됐죠? 이렇게, 실행 흐름을 추가하는 것입니다.
extends Thread 를 사용하기
이번에는 extends Thread를 사용해서 해봅시다.
extends 는 상속이죠? 상속을 하는 것이기 때문에, 따로 오버라이딩을 꼭 해줘야 한다거나 하는건 아니지만, run() 을 오버라이딩 해줘야 저희가 원하는 대로 만들 수 있습니다.
getName() , sleep() 앞에 Thread. 이 안붙었죠? 그 이유는 클래스를 상속 받았기 때문입니다.
상속을 받아서, 부모의 변수나 메서드를 가지고 있기 때문이에요 ~
main 에서도 따로 Thread 를 만들어 줄 필요 없이, 만든 클래스를 객체화 하고 그냥 start()를 사용해주면 됩니다.
예제를 조금 더 봅시다
위에 만든 Thread 를 객체2개와 쓰레드2개로 사용하는 것, 객체1개와 쓰레드2개로 사용하는 것. 을 확인해 봅시다
- 객체 2개, 쓰레드 2개
- 객체 1개, 쓰레드 2개
객체 1개를 쓰레드 여러개로 사용할 경우, 이렇게 멤버변수의 값을 같이 사용하는 현상을 발견 할 수 있습니다.
Sinsynchronized
synchronized는 스레드가 사용중인 객체를 다른 스레드가 변경할 수 없도록 객체에 lock을 걸어 줍니다
A 쓰레드가 먼저 이 객체를 사용하는 동안 B 쓰레드는 사용할 수 없기 때문에, A가 먼저 다 실행이 된 후에 B가 실행이 된 걸 확인 할 수 있습니다.
오늘은 이렇게 Thread에 대해 알아 보았습니다.
고생하셨습니다. 오늘로 Java는 끝났습니다 ~
배우지 않은 부분도 있는데... javaNet 과 Fx 라고 합니다.
javaNet은 서버 관련된 건데, 뒤에 다른 언어를 할 때 배우기 때문에 그 때 배울거라고 합니다.
Fx 는 몰라도 된다고 하시네요
'JAVA 공부' 카테고리의 다른 글
Java 1.8 변경사항 (0) | 2021.10.01 |
---|---|
Java에서 Poi 라이브러리 다운로드 및 사용 (0) | 2021.03.29 |
Day27 - 정규식 표현법 (0) | 2021.03.24 |
Day27 - 반복자 스트림 (0) | 2021.03.24 |
Day26 - 익명 객체(클래스) 내부클래스 와 람다식 , 반복자 스트림 (0) | 2021.03.23 |