Java

[Java] Thread

Bay Im 2024. 3. 18. 12:58
  • 프로세스 (process)
    • 실행 중인 하나의 프로그램
    • 하나의 프로그램이 다중 프로세스를 만들기도 한다.
  • 멀티 태스킹 (multi tasking)
    • 두 가지 이상의 작업을 동시에 처리하는 것
    • 멀티 프로세스
      • 독립적으로 프로그램들을 실행하고 여러가지 작업 처리
    • 멀티 스레드
      • 한 개의 프로그램을 실행하고 내부적으로 여러가지 작업 처리
    • 멀티 프로세스(여러 개의 프로세스) 안에→ 각 프로세스 안에 멀티 스레드(여러 개의 스레드)
  • 메인 스레드
    • 모든 자바 프로그램은 메인 스레드가 main() 메소드를 실행하며 시작
    • 실행 종료는 마지막 코드 실행되거나 return 문을 만날시에 종료
      • 싱글 스레드
        • 메인 스레드가 종료하면 프로세스도 종료
      • 멀티 스레드
        • 실행 중인 스레드가 하나라도 있다면 프로세스 미종료
  • 스레드 생성 방법
    • Runnable 인터페이스 이용
      • Runnable을 매개값으로 갖는 생성자 호출
      • 기본 형식
        • class R1 implements Runnable {
          	@Override
          	public void run() {
          		while(true) {
          			실행문;
          		}
          	}
          }
          
          // 메인
          R1 r1 = new R1();
          Thread t = new Thread(r1);
          t1.start();
    • Thread 추상 클래스 이용
      • Thread 클래스 상속 후 run() 메소드 재정의하여 스레드가 실행할 코드 작성
      • 기본 형식
      • class T1 extends Thread {
        	@Override
        	public void run() {
        		while(true) {
        			실행문;
        		}
        	}
        }
        
        // 메인영역
        T1 t = new T1();
        t.start();
      • 예시
      • class 클래스명 extends Thread {
        	// 예시 
        	int count = 0;
           
          @Override
          public void run() {
              // super.run(); <- 지워야 함
              
              // 한번만 실행되기에 무한 반복문 사용
              while (true) {
        	      // 예시
        	      System.out.println("Printer: " + count++);
        	      if (count > 10) {
        		      break;
        		     }
        	     }
            }
        }
        
        // 메인 영역
        Printer printer = new Printer();
        printer.start();
  • 스레드 스케줄링
    • 스레드의 개수가 코어의 수보다 많을 경우 스레드를 어떤 순서로 동시성으로 실행할지 결정하는 것
    • 스케줄링에 의해 스레들은 번갈아 가면서 run() 메소드를 조금씩 실행
  • 동시성과 병렬성
    • 동시성
      • 멀티 작업을 위해 하나의 코어에서 멀티 스레드가 번갈아가며 실행하는 성질
    • 병렬성
      • 멀티 작업을 위해 멀티 코어에서 개별 스레드를 동시에 실행하는 성질
  • java.io 패키지
    • 자바의 기본적인 데이터 입출력(I/O: Input/Output) API 제공
    • 주요 클래스
      • 파일 시스템의 파일의 정보를 얻기위한 클래스
        • File
      • 콘솔로부터 문자를 입출력하기 위한 클래스
        • Console
      • 바이트 단위 입출력을 위한 최상위 입출력 스트림 클래스
        • InputStream, OutputStream
      • 바이트 단위 입출력을 위한 하위 스트림 클래스
        • FileInputStream, FileOutputStream
        • DataInputStream, DataOutputStream
        • ObjectInputStream, ObjectOutputStream
        • PrintStream
        • BufferedInputStream, BufferedOutputStream
      • 문자 단위 입출력을 위한 최상위 입출력 스트림 클래스
        • Reader, Writer
      • 문자 단위 입출력을 위한 하위 스트림 클래스
        • FileReader, FileWriter
        • InputStreamReader, OutputStreamWriter
        • PrintWriter
        • BufferedReader, BufferedWriter
  • 바이트 기반 스트림
    • 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 받고 보내는 것 가능
  • 문자 기반 스트림
    • 문자만 받고 보낼 수 있도록 특화
  • InputStream
    • 바이트 단위 입력 스트림의 최상위 클래스로 추상 클래스
    • 주요 메소드
      • read()
        • 입력 스트림으로부터 1 바이트를 읽고 읽은 바이트를 리턴한다.
      • close()
  • OutputStream
    • 바이트 기반 출력 스트림의 최상위 클래스로 추상 클래스
    • 주요 메소드
      • write()
        • 출력 스트림으로 1 바이트를 보낸다.
      • flush()
        • 버퍼에 잔류하는 모든 바이트를 출력
      • close()
  • Reader
    • 문자 기반 입력 스트림의 최상위 클래스로 추상 클래스
    • 주요 메소드
      • read()
        • 입력 스트림으로부터 한개의 문자를 읽고 리턴
      • close()
  • Writer
    • 문자 기반 출력 스트림의 최상위 클래스로 추상 클래스
    • 주요 메소드
      • write()
        • 출력 스트림으로 매개값으로 주어진 한 문자를 보낸다.
      • flush()
        • 버퍼에 잔류하는 모든 문자열 출력
      • close()
  • File 클래스
    • 파일 시스템의 파일을 표현하는 클래스
    • 파일 객체 생성
    • 파일 또는 디렉토리 존재 유무 확인
    • 파일 및 디렉토리 생성 및 삭제 메소드
      • createNewFile()
      • mkdir()
      • mkdirs()
        • 경로상에 없는 모든 디렉토리 생성
      • delete()
  • FileReader, FileWriter
    • 텍스트 파일로부터 데이터를 읽어들이거나, 저장할 떄 사용
    • FileWriter fw = new FileWriter(”파일경로”, true); 형식

'Java' 카테고리의 다른 글

[Java] JDBC  (0) 2024.03.18
[Java] Collection  (0) 2024.03.18
[Java] Exception  (0) 2024.03.18
[Java] 중첩 클래스, Wrapper 클래스, API 메소드, 자바 관련 단어들  (0) 2024.03.18
[Java] Abstract, Interface  (0) 2024.03.13