[] STUDY 내용

작성일 2003-10-21
작성자 park
조회수 696
제 목 쓰레드

목록으로 | 수정 | 삭제 | 정보추가[reply] | 신규입력

쓰레드


1. 멀티 태스킹과 멀티 쓰래드의 차이점

멀티 태스킹 : 하나 이상의 프로세서를 이용하여 여러개의 프로그램을 동시에 실행하는 것.

멀티 쓰래드 : 하나의 프로그램에서 여러개의 일을 동시에 실행하게 하는 것.

2. Thread의 사용 순서

Thread class를 상속한다

쓰레드 내용을 run()메소드에 오버라이드 한다.

해당 클래스를 객체로 생성

클래스 객체에 start()메서드 호출(지정)


3. Thread를 생성하는 방법

1) 단독의 상속일 경우

class class_name extends Thread

{

    public void run()

    {

      쓰레드에서 수행할 프로그램 작성;

    }

    class_name obj = new class_name();

    obj.start();

}


2) 이미 다른 클래스를 상속하고 있을 경우(예 Applet을 이미 상속하고 있을 경우)

class class_name extends Applet implements Runnable

{

    public void run()

    {

      쓰레드에서 수행할 프로그램 작성;

    }

    class_name obj = new class_name();

    Thread t=new Thread(obj);

    t.start();

}


3) run() 메소드와 start() 메소드의 관계

프로그래머는 start()만을 호출할 수 있다. 프로그래머가 start()를 호출하면 자바 가상머신은 해당 쓰레드를 Ready 상태로 바꾸고, 쓰레드 스케쥴러가 run()상태로 바꾸어 비로소 run() 메소드가 실행되는 것이다.

4. Thread 예(단독상속)

1) 매소드 사용안함

class ac_Thread_1 extends Thread

{

    int i,sum;

    public void run()

    {

      for(i=0 ; i<11 ; ++i)

      {

        try { Thread.sleep(500);}

        catch(InterruptedException e) { }

        sum=sum+i;

        System.out.println("sum="+sum);

      }

    }

    public static void main(String[] args)

    {

      ac_Thread_1 t1=new ac_Thread_1();

      ac_Thread_1 t2=new ac_Thread_1();

      t1.start();

      t2.start();

    }

}


2) 메소드 사용

class ac_Thread_1 extends Thread

{

    int i, sum;

    public void prn()

    {

      i=i+1;

      sum=sum+i;

      System.out.println("sum="+sum);

    }

    public void run()

    {

      for(int i=0 ; i<11 ; ++i)

      {

        try { Thread.sleep(500);}

        catch(InterruptedException e) { }

        prn();

      }

    }

    public static void main(String[] args)

    {

      ac_Thread_1 t1=new ac_Thread_1();

      ac_Thread_1 t2=new ac_Thread_1();

      t1.start();

      t2.start();

    }

}


3) 외부 클래스 사용

class ac_Thread_1 extends Thread

{

    public void run()

    {

      ac_Thread_1_sub ts=new ac_Thread_1_sub();

      for(int i=0 ; i<11 ; ++i)

      {

        try { Thread.sleep(500);}

        catch(InterruptedException e) { }

        ts.prn();

      }

    }

    public static void main(String[] args)

    {

      ac_Thread_1 t1=new ac_Thread_1();

      ac_Thread_1 t2=new ac_Thread_1();

      t1.start();

      t2.start();

      }

    }

class ac_Thread_1_sub

{

    int i,sum;

    void prn()

    {

      i=i+1;

      sum=sum+i;

      System.out.println("sub_sum="+sum);

    }

};


4) 외부 클래스가 Thread를 상속하였을 때

//=========================================================

// Thread - 외부 클래스가 쓰레드일 경우

//---------------------------------------------------------

// 제 목 : Thread 사용하기4

// 작성자 : 박원기

// 작성일 : 2002

//=========================================================

class ac_Thread_4

{

    public static void main(String[] args)

    {

      //Thread t1=new ac_Thread_4_sub1();

      //Thread t2=new ac_Thread_4_sub2();

      ac_Thread_4_sub1 sub_t1=new ac_Thread_4_sub1();

      ac_Thread_4_sub2 sub_t2=new ac_Thread_4_sub2();

      Thread t1=new Thread(sub_t1);

      Thread t2=new Thread(sub_t2);

      t1.start();

      t2.start();

    }

}

class ac_Thread_4_sub1 extends Thread

{

    int i, sum;

    public void run()

    {

      for(i=1 ; i<10 ; i=i+2)

    {

    System.out.println("Thread 1 " + i);

    try

    {

      sleep(500);

    }

    catch (InterruptedException e)

    {

    }

    }

    }

};

class ac_Thread_4_sub2 extends Thread

{

    int i, sum;

    public void run()

    {

      for(i=0 ; i<10 ; i=i+2)

    {

    System.out.println("Thread 2 " + i);

    try

    {

      sleep(500);

    }

    catch (InterruptedException e)

    {

    }

    }

    }

};




5. 다중 상속일 경우(Applet 사용)

1)

//=========================================================

// Applet

//---------------------------------------------------------

// 제 목 : Thread 사용하기2

// 작성자 : 박원기

// 작성일 : 2002

//=========================================================

import java.awt.*;

import java.applet.*;

public class ap_Thread extends Applet implements Runnable

{

    int i,sum;

    public void init()

    {

      resize(500,500);

      setBackground(Color.white);

    }

    public void start()

    {

      Thread t= new Thread(this);

      t.start();

    }

    public void paint(Graphics g)

    {

      g.drawString("sum="+sum,40,i);

    }

    public void draw(int i)

    {

      Graphics g=getGraphics();

      sum=sum+1;

      g.drawString("sum="+sum,40,i);

    }

    public void run()

    {

    for(i=50; i<400 ; i=i+15)

    {

      //repaint();

      draw(i);

      try

      {

        Thread.sleep(500);

      }

      catch (InterruptedException e)

      {

      }

      }

    }

}

>


쓰레드 과(와) 관련된 추가 정보

  • 예외처리 [2003-10-21] [park님 재공] [조회:782]
  • 쓰레드 [2003-10-21] [park님 재공] [조회:696]

    목록으로 | 수정 | 삭제 | 정보추가[reply] | 신규입력