-
[JAVA] 멀티태스킹(multi-tasking), 스레드, 타이머 예제Languages/Java 2021. 5. 18. 18:36반응형
멀티 태스킹
하나의 응용프로그램이 여러 개의 작업을 동시에 처리
스레드(thread) 실(thread)
바늘이 하나의 실을 가지고 바느질하는 것과 자바의 스레드는 일맥 상통
코드의 실행이 스레드라고한다.
스레드
사용자가 작성한 코드로서, JVM에 의해 스케줄링되어 실행되는 단위
자바의 멀티태스킹
멀티스레딩만 가능
스레드는 JVM의 의한 실행 단위, 스케쥴링 단위
하나의 응용프로그램은 여러 개의 스레드로 구성 가능
멀티스레딩의 효과
한 스레드가 대기하는 동안 다른 스레드 실행
프로그램 전체적으로 시간 지연을 줄임
동시에 두가지 이상의 활동을 하는 것이 가능
멀티스레딩 단점
서로 자원을 소모하다가 충돌이 일어날 가능성 존재
코딩이 난해해져 버그생성확률이 높음
자바 스레드란?
모든 자바 프로그램은 main()메소드를 실행하면서 메인 스레드가 시작된다
main()메소드의 첫 코드부터 순차적으로 실행
코드의 실행 -> 스레드
자바 스레드 클래스 java.lang.Thread
Thread()
Thread(String s) 스레드 이름
Thread(Runnable r) 인터페이스 객체
Thread(Runnable r, String s) 인터페이스 객체와 스레드 이름
static void sleep(long msec) throws Interrupted Exception msec에 지정된 밀리초 동안 대기
String getName() 스레드의 이름 가져옴
void setName(String s) 스레드의 이름을 s로 설정
void start() 스레드를 시작 run() 메소드 호출
스레드를 만드는 2가지 방법
java.lang.Thread 클래스를 이용하는 경우
java.lang.Runnable 인터페이스를 이용하는 경우
thread 클래스를 이용한 스레드 생성
스레드 클래스 작성
thread클래스 상속, 새 클래스 작성
스레드 코드 작성
run()메소드 오버라이딩
run()메소드를 스레드 코드라고 부름
run()메소드에서 스레드 실행 시작
class TimerThread extends Thread{ @Override public void run(){ // run() 오버라이딩 ............. } }
스레드 객체 생성
TimerThread th = new TimerThread();
스레드 시작
start()메소드 호출
스레드로 작동 시작, jvm에 의해 스케쥴되기 시작함
th.start();
예제)Thread를 상속받은 타이머 스레드 예제
package project; import java.awt.*; import javax.swing.*; class TimerThread extends Thread { private JLabel timerLabel; public TimerThread(JLabel timerLabel) { this.timerLabel = timerLabel; } @Override public void run() { int n=0; while(true) { timerLabel.setText(Integer.toString(n)); n++; try { Thread.sleep(1000); } catch(InterruptedException e) { return; } } } } public class TimerThreadEx extends JFrame { public TimerThreadEx() { setTitle("Thread를 상속받은 타이머 스레드 예제"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = getContentPane(); c.setLayout(new FlowLayout()); JLabel timerLabel = new JLabel(); timerLabel.setFont(new Font("Gothic", Font.ITALIC, 80)); c.add(timerLabel); TimerThread th = new TimerThread(timerLabel); setSize(300,170); setVisible(true); th.start(); } public static void main(String[] args) { new TimerThreadEx(); } }
실행결과)
반응형'Languages > Java' 카테고리의 다른 글
[JAVA] 그래픽 스윙 컴포넌트 그리기, paintCompnent() (0) 2021.05.18 [JAVA] 파일 다이얼로그, 탭팬 (0) 2021.05.18 [JAVA] 자바 고급 스윙 컴포넌트, JMenuBar, JToolBar, JToolTip, JDialog, JOptionPane , ex (0) 2021.05.10 [JAVA] 자바 JList<E>,JComboBox, JSlider, 슬라이더,JSlider와 Change 이벤트, 예제들 (0) 2021.05.10 [JAVA]자바 마우스리스너/어댑터 클래스/키 리스너/키 판별 방법 (0) 2021.05.10