일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 2020정보처리기사실기요약
- 오버라이딩
- crud게시판
- 프로그래머스 SQL
- js datepicker
- 스프링 CRUD게시판
- 정보처리기사실기정리
- 정처기실기정리
- 2020정보처리기사실기정리
- 스프링 crud
- 오라클설치
- CRUD게시판만들기
- 프로그래머스 MYSQL
- 게시판만들기
- 2020정보처리기사실기
- 자바 정규표현식 예제
- spring crud
- 스프링게시판만들기
- spring crud게시판
- 자바연산자
- jsp 날짜팝업
- 프로그래머스 쿼리문
- 자바배열예제
- jsp 팝업띄우기
- 날짜지정팝업
- 자바기초
- PLSQL
- jsp게시판만들기
- Oracle기초
- html기초
- Today
- Total
영보의 SystemOut.log
[Java] 자바 스레드(Thread)개념 / 스레드 스케줄링 / 예제 본문
자바/스프링 기반 디지털 융합 웹 개발자 양성과정 7일차
자바 스레드(Thread)
- 하나의 프로그램이 동시에 여러 개의 일을 수행할 수 있도록 해주는 기법
- 자바는 언어차원에서 스레드가 지원되기 때문에 안전성과 효율성이 보장됨
- Multi-Threading이 지원되면
→ 하나의 프로그램내에서 여러 개의 일을 동시에 수행하는 것이 가능하고
→ 또 스레드간에 데이터 공유가 가능하므로 멀티프로세스 시스템보다 더 효율적으로 프로그램을 작성 가능하다.
스레드 우선 순위
- 동시성과 병렬성
# 동시성 : 멀티 작업 위해 하나의 코어에서 멀티 스레드가 번갈아 가며 실행하는 성질
# 병렬성 : 멀티 작업을 위해 멀티 코어에서 개별 스레드를 동시에 실행하는 성질
스레드 스케줄링
- 스레드의 개수가 코어의 수보다 많을 경우
- 스레드를 어떤 순서로 동시성으로 실행할 것인가 결정 → 스레드 스케줄링
- 스케줄링 의해 스레드들은 번갈아 가며 run() 메소드를 조금씩 실행
Multi-Threading 정리
- 하나의 프로세스가 여러 가지의 일을 처리해야 할 때, 프로세스 내에 서 각 일을 처리하는 모듈들이 독립적으로 수행되는 것을 의미한다.
- 이 각각의 실행하는 독립적인 모듈을 스레드라고 한다.
- 즉, 스레드란 프로세스내에서 일을 처리하는 ‘세부 실행단위’를 의미함
자바의 스레드 지원 방식
(1) java.lang.Thread 클래스를 사용하는 방법
(2) java.lang.Runnable 인터페이스를 사용하는 방법
#차이점
(1) 방법 : 스레드를 지원하고자 하는 클래스를 생성시 즉 Thread를 상속받는 class를 start() 시킨다.
(2) 방법 : Runnable를 구현한 class를 new Thread()의 인수로 주어서 새로 만든 다른 클래스로부터 상속이 필요한 경우 Thread 객체를 start() 시키는것
Thread 클래스 사용법
(1) Thread 클래스를 상속받은 뒤, 해당 스레드에서 지원하고 싶은 코드를 run() 메서드에서 오버라이딩 해준다.
(2) 해당 스레드 객체를 생성한 후, 스레드 객체의 start() 메서드를 호출한다.
멀티스레드 예제
# BeepPrintEx01.java
package 멀티스레드예제;
import java.awt.*;
/*
싱글 스레드 (즉 메인 스레드) 애플리케이션
*/
public class BeepPrintEx01 {
public static void main(String[] args) {
// Toolkit 객체 얻어오기
/*
Toolkit 클래스는 '시스템 정보'를 얻는 것으로 시스템의 자원에 접근할 수 있는 클래스이다.
*/
Toolkit toolkit = Toolkit.getDefaultToolkit();
for ( int i = 0; i < 5; i++){
toolkit.beep();
try{
Thread.sleep(1000); // 1초간 일시 정지
}catch (Exception e){}
}
for(int i = 0; i < 5; i ++){{
System.out.println("띵");
try{
Thread.sleep(1000); // 1초간 일시 정지
}catch (Exception e){}
}
}
}
}
# BeepTask.java
package 멀티스레드예제;
import java.awt.*;
public class BeepTask implements Runnable{
@Override
public void run() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
for (int i = 0; i < 5; i++){
toolkit.beep();
try{
Thread.sleep(1000); // 1초간 일시 정지
}catch (Exception e){}
}
}
}
# BeepPrintEx02.java
package 멀티스레드예제;
/*
메인 스레드
*/
public class BeepPrintEx02 {
public static void main(String[] args) {
// 작업 스레드 만드는 방법
Runnable beepTask = new BeepTask();
Thread thread = new Thread(beepTask);
thread.start(); // 이 시점에서 작업 스레드와 메인 스레드가 동시에 실행
}
}
# Thread 상속받아서 예제 - RobotRaceStart.java
package 가상의로봇릴레이게임;
import java.lang.*;
class RobotRace extends Thread{
// 생성자
public RobotRace(String name){
super(name);
}
@Override
public void run() {
for(int i=1; i<=10; i++) {
System.out.println(getName() + "가" + i*10 + "m전진");
try {
sleep(2000); // 1초 일시 정지
} catch (InterruptedException e) {
System.out.println(e.toString());
}
}
}
}
public class RobotRaceStart {
public static void main(String[] args) {
RobotRace robotA = new RobotRace("로봇-A");
RobotRace robotB = new RobotRace("로봇-B");
RobotRace robotC = new RobotRace("로봇-C");
robotA.start();
robotB.start();
robotC.start();
}
}
'국비교육(아이티센 입사교육) > Java' 카테고리의 다른 글
[Java] 자바 정규표현식 사용하여 댓글 분석하기 (compile, matcher, pattern) (0) | 2021.10.07 |
---|---|
[Java] 람다식(Lambda Expressions) / 스트림(Stream) / 예제 (0) | 2021.10.06 |
[Java] 자바 인터페이스 / 인터페이스 구현 / 인터페이스 예제 (0) | 2021.10.05 |
[Java] 거스름돈 반환 프로그램 (0) | 2021.10.01 |
[Java] 소문자 대문자 변환, 대문자 소문자 변환 프로그램 (0) | 2021.10.01 |