본문 바로가기
IT/JAVA

[Java] Thread

by 행복한 용용이 2020. 12. 14.
반응형

*Thread : 하나의 Program 안에서 처리죄는 작업(기능)단위

-process : 하나의 cpu가 처리하는 program 단위

시분할방식 (Time Scheduling) : CPU자신을 분할해서 각 프로세스를 처리, 빠르면 빠를수록 좋음. 우리는 동시에 음악도 듣고 카톡도하고 뭐도 하고 하는것 같지만 사실 분할된 cpu들이 계속 반복해서 돌아가는것.

1.생성

Tread : class임으로 생성해야함

Tread t = new Tread(); : tread 상속받는것 (Frame을 상속받은 경우엔 못함)

= new Tread(Runnable); : Runnable interface implements하는것

3.실행: run()

t1.run()

t2.run()

t3.run() (X)> 하면 동기임. t1끝나면 t2하고 t3함.

누가먼저 실행될지 모름. scheduler에 의해 실행됨

2.준비

따라서 준비단계를 거쳐야함

생성>준비>실행

준비 : t1.start();

내부적으로 scheduler가 scheduling할 수 있는 시간 벌어줌

t1.start()

t2.start()

t3.start() (0)> 하면 schduler가 뭐를 먼저 실행할지 정함.

4.대기

실행하다 잠시 멈출 수 있는데 이것이 대기

sleep(long millis )

long millis : 1/1000초

이 시간 지나면 자동적으로 실행으로 돌아옴. : time out

중지

: thread를 강제로 중지하는 것은 좋지 않음으로 쓸 일 없다.

종료

: run method가 끝나는 시점이 종료이다.


ThreadExt

 

 

     package com.kitri.thread;

 

 

     public class ThreadExt extends Thread{

 

 

          String msg;

 

          public ThreadExt(String msg) {

               this.msg = msg;

          }

 

          @Override

          public void run() {

               for(int i=0;i<500;i++) {

                    System.out.println(msg);

               }

          }

     }


ThreadTest

 

 

     package com.kitri.thread;

 

 

     public class ThreadTest {

 

 

          public static void main(String[] args) {

               Thread t1 = new ThreadExt("퐁");

               Thread t2 = new ThreadExt("당");

               Thread t3 = new ThreadExt("!!!");

               //ThreadExt class가 Thread 상속받았으니 new ThreadExt로 해야함

               // t1.run();

               // t2.run();

               // t3.run();

               //이렇게 하면 t1 500번, t2 500번 t3 500번 실행. 일반 method 처럼됨

 

 

               t1.start();

               t2.start();

               t3.start();

 

               System.out.println("프로그램 종료!!!");

          }

     }


RunnableImpl

 

 

 

     package com.kitri.thread;

 

 

     public class RunnableImpl implements Runnable{

 

 

          String msg;

 

          public RunnableImpl(String msg) {

               this.msg = msg;

          }

 

          @Override

          public void run() {

               for(int i=0;i<500;i++) {

                    System.out.println(msg);

               }

          }

     }


RunnableTest

 

 

 

     package com.kitri.thread;

 

 

     public class RunnableTest {

          public static void main(String[] args) {

               Thread t1 = new Thread(new RunnableImpl("퐁"));

               //RunnableImpl 은 Thread를 상속받은게 아니기 때문에 바로 new RunnableImpl을 하면 안되고 Tread를 먼저 생성하고 안에 생성해야함.

               Thread t2 = new Thread(new RunnableImpl("당"));

               Thread t3 = new Thread(new RunnableImpl("!!!"));

 

               t1.start();

               t2.start();

               t3.start();

 

               System.out.println("프로그램종료!!!!!!!!");

          }

     }

 

[출처] 빡쏘끼룩

반응형