• Home
  • About
    • back
    • ming photo

      ming

      studying

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Archive
    • back
    • All Posts
    • All Tags
    • All categories
  • categories
    • back
    • HTML+CSS+JavaScript
    • JAVA
    • Algorithm
    • DB
    • JSP
    • 정보처리기사
    • Spring
    • Thymeleaf
    • 기술면접
  • Projects

JAVA-스레드

05 Mar 2021

✔ 스레드

- 프로세스(process)
    1) 실행중인 하나의 애플리케이션
    2) 애플리케이션이 실행되면 운영체제로 부터 실행에 필요한 메모리 할당받아 코드를 실행한다
    3) 멀티 프로세스 역시 가능하다    
- 스레드 
    1) 한가지 작업을 실행하기 위해 순차적으로 실행할 코드를 이어놓은 것
    2) 하나의 스레드는 하나의 코드 실행 이름
- 멀티 스레드 
    1) 하나의 프로세스로 두가지 이상의 작업을 처리하는 것 
    2) 데이터 분할하여 병렬로 처리하거나 다수 클라이언트 요청 처리하는 서버 개발하는 등의 용도
    3) 한 스레드가 예외 발생시킬 경우 프로세스 자체가 종료될 수 있다
- 메인스레드 
    1) 모든 자바 애플리케이션은 메인 스레드가 main()메소드 실행하면서 시작된다
    2) main() 메소드의 첫 코드부터 아래로 순차적으로 실행한다
    3) 필요에 따라 작업 스레드를 만들어 병렬로 코드 실행 가능하다
    4) 멀티 스레드 애플리케이션에서는 실행 중인 스레드 하나라도 있으면 프로세스는 종료되지 않는다
- 작업 스레드
    1) 멀티 스레드로 실행하는 애플리케이션 개발하려면 몇개의 작업을 병렬로 실행할지 우선 결정 한 뒤 각 잡업별로 스레드 생성해야 한다
    2) 작업 스레드 역시 객체로 생성되므로 클래스가 필요하다
        - 스래드 클래스 상속하여 하위 클래스 만들어 사용할 수 있다
- 데몬 스레드   
    1) 주 스레드의 작업을 돕는 보조적 역할을 하는 스레드 
    2) 일반스레드가 모두 종료되는 자동적으로 종료 된다

💡 메인스레드만 이용한 경우

  • 코드
      package ThisJavaThread;
    
      import java.awt.Toolkit;
    
      public class BeepPrintEx1 {
            
    
          public static void main(String[] args) {
              // 메인 스레드만 이용한 경우 		
                
              // Toolkit 객체 생성
              Toolkit toolkit = Toolkit.getDefaultToolkit();
              for(int i=0; i<5; i++) {
                    
                  // 비프음 발생
                  toolkit.beep(); 
                    
                  // Thread.sleep(500) : 0.5초간 일시정지
                  try { Thread.sleep(500);} catch(Exception e) {}
                                
              }
              for(int i=0; i<5; i++) {
                  System.out.println("띵");
                    
                  // Thread.sleep(500) : 0.5초간 일시정지
                  try {Thread.sleep(500); } catch(Exception e) {}
                    
              }
          }
      }
    

    💡 비프음을 들려주는 작업 정의 – Runnable 구현 클래스

  • 코드
      package ThisJavaThread;
    
      import java.awt.Toolkit;
    
      public class BeepTask implements Runnable {
    
          // 비프음을 들려주는 작업 정의 – Runnable 구현 클래스
          public void run() {
                
              // 여기부터
              Toolkit toolkit = Toolkit.getDefaultToolkit();
              for(int i=0; i<5; i++) {
                  toolkit.beep();
                  try {Thread.sleep(500); } catch(Exception e) {}
                    
              }// 여기까지 스레드 실행내용 		
          }	
      }
    

💡 비프음 - 메인 스레드와 작업 스레드가 동시에 실행

  • 코드
      package ThisJavaThread;
    
      import java.awt.Toolkit;
    
      public class BeepPrintex2  {
    
          public static void main(String[] args) {
                
              // 비프음 - 메인 스레드와 작업 스레드가 동시에 실행
              Runnable beepTask = new BeepTask();
              Thread thread = new Thread(beepTask);
                
              thread.start();
              // thread.start(); :
              /*
              public void run() {		
              // 여기부터
              Toolkit toolkit = Toolkit.getDefaultToolkit();
              for(int i=0; i<5; i++) {
                  toolkit.beep();
                  try {Thread.sleep(500); } catch(Exception e) {}			
              }// 여기까지 스레드 실행내용  */
            
              for(int i=0; i<5; i++) {
                  System.out.println("띵");
                  try { Thread.sleep(500); }
                  catch (Exception e) {}
              }		
          }	
      }
    

💡 비프음을 들려주는 스레드

  • 코드
      package ThisJavaThread;
    
      import java.awt.Toolkit;
    
      // extends Thread  작성하기
      public class BeepThread extends Thread {
            
          // 비프음을 들려주는 스레드
            
          @Override
          public void run() {
              Toolkit toolkit = Toolkit.getDefaultToolkit();
              for(int i=0; i<5; i++) {
                  toolkit.beep();
                  try {Thread.sleep(500); } catch(Exception e) {}
              }
          }
      }
    

💡 메인스레드와 작업 스레드가 동시에 실행

  • 코드
      package ThisJavaThread;
    
      public class BeepPrintEx3 {
    
          public static void main(String[] args) {
                
              // 메인스레드와 작업 스레드가 동시에 실행
              Thread thread = new BeepThread();
              thread.start();
                
              for(int i=0; i<5; i++) {
                  System.out.println("띵");
                  try {Thread.sleep(500); }
                  catch(Exception e) {}
              }
          }
      }
    

💡 메인 스레드 이름 출력 및 UserThread 생성 및 시작

  • 코드
      package ThisJavaThread;
    
      public class ThreadNameEx {
    
          public static void main(String[] args) {
                
              // 메인 스레드 이름 출력 및 UserThread 생성 및 시작
                
              // .currentThread(); : 이 코드를 실행하는 스레드 객체 생성
              Thread mainThread = Thread.currentThread();
              System.out.println("프로그램 시작 스레드 이름 : " + mainThread.getName());
                
              // threadA 생성
              ThreadA threadA = new ThreadA(); 
              System.out.println("작업 스레드 이름 : " + threadA.getName());
              // threadA 시작
              threadA.start();
                
              // threadB 생성
              ThreadB threadB = new ThreadB();
              System.out.println("작업 스레드 이름 : " + threadB.getName());
              // threadB 시작
              threadB.start();
                
          }
      }
    

💡 ThreadA 클래스

  • 코드
      package ThisJavaThread;
    
      public class ThreadA extends Thread{
            
          public ThreadA() {
              // 스레드 이름 설정
              setName("ThreadA");
          }
            
          public void run() {
              for(int i=0; i<2; i++) {
                  // getName() : 스레드 이름 얻기
                  System.out.println(getName() + "가 출력한 내용");
              }
          }
      }
    

💡 ThreadB 클래스

  • 코드
      package ThisJavaThread;
    
      public class ThreadB extends Thread{
            
          public ThreadB() {
              // 스레드 이름 설정
              setName("ThreadB");
          }
            
          public void run() {
              for(int i=0; i<2; i++) {
                  // getName() : 스레드 이름 얻기
                  System.out.println(getName() + "가 출력한 내용");
              }
          }
      }
    


Share Tweet +1