21.01.20-41일차

4036 단어 쓰레드ThreadThread

🚅 쓰레드(thread)


🚋 프로세스와 쓰레드(process & thread)

👉 프로세스: 실행 중인 프로그램, 자원(resources(메모리. CPU...))과 쓰레드로 구성
👉 쓰레드: 프로세스 내에서 실제 작업을 수행.(모든 프로세스는 최소한 하나의 쓰레드를 가지고 있다)
👉 싱글 쓰레드 프로세스 = 자원 + 쓰레드
👉 멀티 쓰레드 프로세스 = 자원 + 쓰레드 + 쓰레드 + ... + 쓰레드
👉 하나의 새로운 프로세스를 생성하는 것보다 하나의 새로운 쓰레드를 생성하는 것이 더 적은 비용이 든다.



🚋 멀티쓰레드의 장단점

👉장점:
시스템 자원을 보다 효율적으로 사용할 수 있다,
사용자에 대한 응답성(responseness)이 향상됨,
작업이 분리되어 코드가 간결해짐
👉단점:
동기화(synchronization)에 주의,
교착상태(dead_lock)가 발생하지 않도록 주의,
기아문제 : 각 쓰레드가 효율적으로 고르게 실행될 수 있게 해야함



🚋 쓰레드의 구현과 실행

  1. Thread클래스를 상속
class MyThread extends Thread{
   public void run() {  // Thread클래스의 run()을 오버라이딩
   	/* 작업내용 */
   }
}
MyThread t1 = new MyThread();  // 쓰레드의 생성
t1.start(); // 쓰레드의 실행
  1. Runnable인터페이스를 구현
class MyTread2 implements Runnable {
  public void run() {  // Runnable인터페이스의 추상메서드 run()을 구현
  	/* 작업내용 */
  }
}
Runnable r = new MyThread2();
Thread t2 = new Thread(r);  // Thread(Runnable r)
// 한줄로하면 Thread t2 = new Thread(new MyThread2));
t2.start();

🚋 쓰레드의 실행 - start()

  • 쓰레드를 생성한 후에 start()를 호출해야 쓰레드가 작업을 시작함
ThreadEx1_1 t1 = new ThreadEx1_1();
ThreadEx1_1 t2 = new ThreadEx1_1();
.
t1.start();
t2.start();


🚋 싱글쓰레드 & 멀티쓰레드

🚃 싱글쓰레드

class ThreadTest {
	public static void main(String[] args) {
		for(int i=0; i< 300; i++)
		System.out.print(new String("-"));
	}
    		for(int i=0; i< 300; i++)
		System.out.print(new String("|"));
      }
   }
}


🚃 멀티쓰레드

public class ThreadTest {
    public static void main(String[] args) {
	ThreadEx1 th1 = new ThreadEx1();
	ThreadEx2 th2 = new ThreadEx2();
.
	th1.start();
	th2.start();
    }
}
class ThreadEx1 extends Thread {
	public void run() {
		for(int i=0; i< 300; i++)
		System.out.print(new String("-"));
    } 
  }
}
class ThreadEx1 extends Thread {
	public void run() {
		for(int i=0; i< 300; i++)
		System.out.print(new String("|"));
    } 
  }
}



🚋 쓰레드의 우선순위(priority of thread)

  • 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 하여 특정 쓰레드가 더 많은 작업시간을 갖게 할 수 있다.
  • 우선순위가 같은 경우
  • A의 우선순위가 높은 경우


🚋 쓰레드 그룹

  • 서로 관련된 쓰레드를 그룹으로 묶어서 다루기 위한 것
  • 모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있어야 한다.
  • 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 'main쓰레드 그룹'에 속한다.
  • 자신을 생성한 쓰레드(부모 쓰레드)의 그룹과 우선순위를 상속받는다.

🚋 쓰레드 그룹의 메서드



🚋 출처

자바의 정석 책 & 유튜브

좋은 웹페이지 즐겨찾기