ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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();
    	}
    }
    

     

     

    실행결과)

     

    반응형

    댓글

Designed by Tistory.