차근차근 개발자 되기

Java

17일차: Java Thread/java.io패키지- 2021.07.07

wellow 2021. 7. 7. 23:51

목차

1.    Thread

2.    java.io패키지

 

1. Thread 제어                                           → ★ManageToilet / Toilet / Family 참고

 

프로세스(process): 실행 중인 하나의 애플리케이션

스레드(thread): 각 프로세스를 구성하는 작업 단위

 

1) Thread 제어: 동기화 기법

- 한 번에 하나의 쓰레드만 객체에 접근할 수 있도록 객체에 락(lock)을 걸어서 데이터의 일관성을 유지하는 것

- synchronized로 선언된 메소드는 한 번 실행이 끝나야 다음 실행이 가능

- 다른 Thread들은 한 개의 Thread가 이 메소드의 실행을 끝낼 때까지 대기

 

동기화 메소드

- 메소드에 lock을 설정

   public  synchronized  void  Method(){

      임계영역 처리구문

   }

 

동기화 블록

- 특정 객체에 lock 을 설정)

   public  void  Method(){

        synchronized(동기화할 객체 또는 동기화할 클래스명){

            임계영역 처리구문

        }

    }

 

2. java.io 패키지

 

1) java.io 패키지

- 자바의 기본적인 데이터 입출력(IO: Input/Output) API 제공

 

2) 스트림(Stream)

- 스트림(Stream) : 데이터의 흐름

- 입력 스트림: 데이터 입력을 위한 통로

- 출력 스트림: 데이터 출력을 위한 통로

 

바이트 기반 스트림(Byte Stream)                                → ★InputStreamTest 참고

- 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 받고 보내는 것 가능 (1 byte 단위로 입·출력 처리)

 

문자 기반 스트림(Text Stream)                                   → ★InputStreamReaderTest 참고

- 문자만 받고 보낼 수 있도록 특화 (2 byte 단위로 입·출력 처리)

 

 

3) Byte Stream 클래스

InputStream (입력) OutputStream (출력)
FileInputStream / FilterInputStream /
BufferedInputStream / DataInputStream /
ObjectInputStream
FileOutputStream / FilterOutputStream / BufferedOutputStream /
DataOutputStream / PrintStream /
ObjectOutputStream

 

4) Text Stream 클래스

Reader (입력) Writer (출력)
BufferedReader / InputStreamReader
/ FileReader
BufferedWriter / OutputStreamWriter
/ FileWriter / PrintWriter

 

① InputStreamReader               → ★InputStreamReaderTest / InputStreamReaderTest2 참고

- 2 byte 단위의 데이터를 읽을 수 있는 클래스

- 2 byte인 한글은 한글자만 읽는다. (ex. ‘가나입력 → ‘만 입력됨)

- 배열을 이용하면 여러 글자 입력이 가능하다.

 

② BufferedReader 클래스          → ★BufferedReaderTest / BufferedReaderEx 참고

- 문자 길이에 구애받지 않고 입력이 가능한 클래스

- read()가 아닌 readLine() 메소드를 사용

 

5) 파일 입출력 클래스

① Byte Stream 클래스               → ★FileInputStreamTest  / FileOutputStreamTest 참고

- 1byte 단위이기 때문에 한글 텍스트 읽기 불가

- 객체 생성시 예외처리 필요

• FileInputStream: 입력 클래스

• FileOutputStream: 출력 클래스

 

② Text Stream 클래스               → ★FileReaderTest / FileWriterTest 참고

- 2 byte 단위이기 때문에 한글 텍스트 읽기 가능

- 객체 생성시 예외처리 필요

• FileReader: 입력 클래스

• FileWriter: 출력 클래스

 

* 상대 경로: new FileInputStream( "read.txt" );        현재 프로젝트 디렉토리에 파일 저장

* 절대 경로: new FileInputStream( "d:/read.txt" );     → d드라이브에 파일 저장