>Thread(쓰레드)
>>프로세스
- 실행된 프로그램
- 운영체제로부터 시스템 자원을 할당받는 작업의 단위
: 자바 프로그램은 운영체제 대신 JVM에 의해 자원을 할당받는다.
>>쓰레드
-프로세스의 특정한 수행 경로/프로그램의 처리 경로 /프로그램의 흐름
(main메소드가 실행되면 main thread가생성되고 직접 안에있는 내용을 처리해준다)
-쓰레드는 단일 쓰레드와 멀티 쓰레드가 있다.

>>멀티 쓰레드
-하나의 프로세스를 동시에 처리하는 것처럼 보이지만 사실은 매우 짧은 당위로 분할해서 차례대로 처리한다.
: 여러개의 경로를 가질 수 있게 한다.
:한개의 처리경로를 여러개로 나누어 동시 작업이 가능해진다.
-웹 페이지(JSP)가 대표적인 멀티 쓰레드 응용 프로그램이다.
<장점>
1. 효율성 증가
2. 처리량 증가
3. 처리비용 감소
<단점>
1. 복잡하고 설계가 어려움
2. 자원의 공유문제
3. 교착상태(Deadlock)
*교착 상태란?
:멀티 쓰레드 중 쓰레드 간의 대기 상태가 종료되지 않아서 무한정 대기만 하는 비정상적인 상태
Solution>> 제어문을 통해 교착상태를 판단하고 다시 깨워준다.
>>쓰레드 생성 두가지 방법
1. Thread 클래스 상속

2. Runnable 인터페이스 지정 후 Thread 객체에 넘겨주기 (더 선호)
Runnable 이랑 Thread 둘 다 run( ) 이라는 메소드를 갖고있다. 그래서 불러오면 그 메소드를 실행시켜준다.

<멀티 쓰레드를 적절한 속도로 출력할때>
1.객체에 담아 thread 객체에 넘겨주기
2.Start( ) 메소드 쓰기
:완성된 쓰레드를 컴퓨터에 넘겨주며 스케쥴링 시키는 메소드
(스케쥴링 되어야 멀티쓰레드로 쓸 수 있다)
3.join( ) 메소드 쓰기
:다른 쓰레드들을 본인이 완료될때까지 잠시 멈춰두는 역할을 한다.
*마지막에 try ,catch로 쓰레드의 예외를 잡아준다.

>>동기화(synchronized)
-하나의 쓰레드가 실행 중일 때 다른 쓰레드가 동시에 같은 필드를 사용하지 못하도록 막는것
synchronized(this){
//다른 쓰레드가 동시에 접근 불가
}
예제1. 두개의 쓰레드를 사용하면서
돈 10000원을 1000원씩 빼려고 한다.


-----------------------------------------------------------------------------------------------------------------
>파일 입출력

1. Writer(입력)
FileWriter > BufferedWriter > 파일에 입력
1)FileWriter
-경로에 있는 파일을 가져오는 클래스(쓰기 위해)
*파일이 없는 경우에는 그 이름대로 파일을 생성해준다.
*하지만 경로가 이상한 경우에는(폴더가 잘못된 폴더인 경우) 폴더를 생성해 주지는 않고, 예외가 발생한다.
---> 보통 경로가 맞아도 예외를 무조건 try catch 로 잡아주게 된다.
(=IOException 라는 예외 )
new FileWriter("파일경로") : 덮어쓰기 모드
new FileWriter("파일경로",true) : 추가 모드
예제. text.txt 만들면서 내용 써보기(추가해보기)

2)BufferedWriter
-버퍼를 이용해서 파일을 작성하기 위해 쓰는 클래스 : 덮어쓰기 모드
<과정>
(1)BufferedWriter bf = new BufferedWriter ( new FileWriter("파일 경로"));
(2)bf. write(" 문자열 "); <-------버퍼에 문자열 쓰기
(3)bf.close( ); <-------------------- 실제 파일에 적용
(버퍼에 있는 데이터들을 파일에 써주면서 버퍼 닫기)
2. Reader(출력)
FileReader > BuferedReader > 파일에서 출력
1)FileReader
-경로에 있는 파일 가져오는 클래스(읽기 위해)
* 이 경우에는 두가지 예외가 발생할 수 있음.
-FileNotFoundException
: 파일을 읽어오는데 파일이 없으면 예외 발생
-IOException
: 파일 읽어 오다가 경로 바뀌면 예외 발생
<과정>
(1)BufferedWriter bf = new BufferedWriter ( new FileWriter("파일 경로"));
(2)객체명.readLine(); 으로 문자열 출력하기(while , if문 사용)
*다시 처음부터 읽고 싶다면 재정의하기
(3)두가지 예외처리하기(try, catch 사용)
예제. test.txt 파일 읽어보기

'프로그래밍 > Java 정리' 카테고리의 다른 글
객체 지향 프로그래밍(OOP) (0) | 2022.07.21 |
---|---|
Java 13일차 - Collection Framework (0) | 2021.12.02 |
Java 12일차 -Object, Wrapper,Generic class (0) | 2021.12.02 |
Java 11일차 -익명 클래스, 예외처리 (0) | 2021.11.30 |
Java 10일차 - 추상,내부 클래스 (0) | 2021.11.30 |