자바기초(쓰레드)

bitna's study note·2022년 5월 22일
0

자바

목록 보기
88/119

5월 20일 내용정리

1.처리속도 차이때문에 cpu는 빨리처리 HDD는 느리게 일처리 그중간에서 ram(메모리)이 중간다리 역할을 해주면서 일처리속도를 조율해줌
cpu는 ram(메모리)하고만 일하는데 이마저도 속도 차이가 있어서 조율해주는 캐시메모리가 존재함

2.HDD를 메모리에 프로그램을 올리는것을 '로딩한다' 라고 말함.
또한 HDD에서 꺼내어 메모리에 로딩된 프로그램을 '프로세스' 라고 한다.

3.cpu가 프로세스안에 들어 있는 작업단위를 가지고 일하는것을 '쓰레드' 라고함
이때 프로세스안에 작업단위 하나만 작업하는걸 '단일 쓰레드' 여러 작업단위가 한번에 작업하는걸 '멀티쓰레드' 라고 함

4.JVM 작업 하는 방식
JVM이 처음 메인쓰레드를 실행->작업1 ->작업2 이렇게 메인쓰레드에 차곡 차곡 쌓이고
작업2->작업1->메인쓰레드 맨위에 있는것 부터 순서대로 일처리를함.

5.운영체제가 스케줄러를 이용하여 작업의 스케줄을 관리함.
cpu가 시간을 나눠서 작업단위를 관리하면서 차례대로 작업을 처리한다.
작업1->작업2->작업3->작업1->작업2->작업3이런식으로 조금씩 작업단위를 나눠서 순서대로 조금씩처리하는데 회전돌아가는 속도가 빨라 우리가 느끼기에 동시다발적으로 처리한다고 생각함

6.Thread 생성 방법
(1). Thread class를 상속 받아 run()메서드 재정의
Thread 객체 내의 start()메서드 호출 스레드 실행

(2). Runnable 인터페이스를 구현
이 인터페이스에 있는 run()추상메서드를 구현
Thread 생성자로 Runable 객체 전달
Thread 객체 내의 start()메서드 호출해서 스레드 실행

class RunnableClass implements Runable{
//스레드가 실행할 코드
}
Thread thread = new Thread(new RunnableClass());
thread.start()

@ 주의 사항

  • 재정의한 메서드는 run()이지만 Thread의 실행은 strart()메서드 호출
  • Thread 객체는 재사용 할 수 없다
    하나의 객체는 한번만 start() 메서드 호출이 가능
package threadexam;
//1.  Thread class를 상속 받아 run()메서드 재정의
//  1) Thread class 상속 받아 run()메서드 재정의 한 클래스 만들기
//  2) Thread 객체 생성
//  3) start()메서드를 이용해서 Thread 실행

class JamakThread extends Thread { //1) Thread class 상속 받아 run()메서드 재정의 한 클래스 만들기
@Override
public void run() {
   String[] jamak = new String[] { "하나", "둘", "셋", "넷" };
   try {   // 자막이 약간 늦게 나오게 하기 위해
      Thread.sleep(10);
   } catch (Exception e) { }
   
   
   for (int j = 0; j < jamak.length; j++) {
      System.out.println("영화 자막 : " + jamak[j]);
      try {
         Thread.sleep(1000);// 1초 후에 실행
      } catch (InterruptedException e) {
         System.out.println("실행 오류");
      }
   }
}
}

public class ThreadExam02 {

public static void main(String[] args) {

   
//     2) Thread 객체 생성
   Thread jamakFileThread = new JamakThread();
//     3) start()메서드를 이용해서 Thread 실행      
     jamakFileThread.start();  //멀티 스레드 실행
     //start() = 새로운 스레드 생성/추가를 위한 모든 준비  + 새로운 스레드 위에 run()실행
   //  jamakFileThread.run(); // 단일 스레드로 동작
     
   int[] frame = new int[] {1,2,3,4};
    for(int i=0; i<frame.length; i++) {
       System.out.print("영화 프레임 : " + frame[i] + " - ");
       
       try {
         Thread.sleep(1000);// 1초 후에 실행
      } catch (InterruptedException e) {
         System.out.println("실행 오류");
      } 
    }


   
}

}
profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글

관련 채용 정보