싱글 쓰레드와 멀티 쓰레드

NOAH·2021년 1월 26일
0
post-thumbnail

Main Thread

main 메서드의 코드를 수행하는 쓰레드에요.
쓰레드는 사용자 쓰레드(user thread)와 데몬 쓰레드(daemon thraed)가 있어요.
프로그램은 사용자 쓰레드(user thread) 가 하나도 없을 때 프로그램은 종료되어요.

싱글쓰레드


Class Ex12_2{
	public static void main(String args[]){
  	long startTime = System.currentTimeMillis();
      
      for(int i = 0; i < 300; i++){
      System.out.printf("%S", new String("-"));
      
      Systeom.out.print.("소요시간1:" + (System.currentTimeMillis()- startTime));
      
      for(int i = 0 ; i < 300 ; i ++){
      	System.out.printf("%s", new String("*"));
          
          System.out.printf("소요시간2:" + (System.currentTimeMillis() - startTime));
      }
      }
  }
}


---- ouput -----

-----------------------------------------------
----------------------------------------------
----------------------------------------------
------------------------소요시간1:45***********
**********************************************
***********************************************
*************************************소요시간2:60



----------------

멀티쓰레드


package chapter13;

public class Ex13_3 {
   static long startTime = 0 ;

   public static void main(String args[]) {
       ThreadEx3_1 th1 = new ThreadEx3_1();
       th1.start();
       startTime = System.currentTimeMillis();

       for (int i = 0; i < 300; i++)
           System.out.printf("%S", new String("-"));

       System.out.print("소요시간1:" + (System.currentTimeMillis() - Ex13_3.startTime));

   }
}

class ThreadEx3_1 extends Thread {
   public void run(){
       for(int i = 0 ; i < 300 ; i++)
           System.out.printf("%s", new String("|"));
       System.out.print("소요시간2:" + (System.currentTimeMillis() - Ex13_3.startTime));
   }
}

	

}

출력값

------|||-----------------------------
-------------------------------------
-----------------||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||||
||||||---------------------------------
|||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||
||||||||-----------------------------
---------------||||||------||||||||-
|-|------|-|-------|||||||||||||||||
||||||||||||-|||||||||||||||||||||---
--|||||||||||||---------------
---------|||||||||||||||||||||||||||
||||||||||-----------------------||------
---------------------------------||
|||||||||||------------------||||||
||||||||||||소요시간1:57소요시간2:57

예제는 컴퓨터의 성능이나 실행환경에 의해서 실행결과는 달라질 수 있어요. 두 개의 쓰레드로 작업하여도 더 많은 시간이 걸린 이유는 두가지에요.

  • 쓰레드를 번갈아가면서 작업을 처리하기 떄문에 작업전환시간이 소요
  • 한 쓰레드가 화면에 출력하고 있는 동안 다른 쓰레드는 출력이 끝나기르 기다려야 하는 대기시간

또한 소요시간이 항상 다른이유는 OS의 스케쥴러에 의해서 어떤 쓰레드가 얼마동안 실행될지 결정되기 때문이에요.

0개의 댓글