파일 입출력
바이트 카피
파일 카피
디렉토리 카피
재귀 호출을 통해 전체 파일을 카피한다
package kosta.basic.day019.problem3;
import java.io.*;
public class ProblemMain {
public static void main(String[] args) throws IOException {
String source = "/Users/Rene/Documents/rene/Kosta/Cloud_Native_Application_Java_Course/workspace/JavaWork/practiceJava/src/main/java/kosta/basic/day019/testSource";
String target = "/Users/Rene/Documents/rene/Kosta/Cloud_Native_Application_Java_Course/workspace/JavaWork/practiceJava/src/main/java/kosta/basic/day019/targetDir";
File sourceDirectory = new File(source);
File targetDirectory = new File(target);
copyAll(sourceDirectory, targetDirectory);
}
private static void copyAll(File sourceDirectory, File targetDirectory) throws IOException {
createTargetDirectory(targetDirectory);
for (File fileEach : sourceDirectory.listFiles()) {
if (fileEach.isDirectory()) {
copyAll(fileEach, getFileToCopy(targetDirectory, fileEach));
continue;
}
copyFile(fileEach, getFileToCopy(targetDirectory, fileEach));
}
}
private static void copyFile(File source, File target) throws IOException {
InputStream inputStream = new FileInputStream(source);
OutputStream outputStream = new FileOutputStream(target);
copyBytes(inputStream, outputStream);
inputStream.close();
outputStream.close();
}
private static void createTargetDirectory(File destinationDirectory) {
if (!destinationDirectory.exists()) {
destinationDirectory.mkdir();
}
}
private static File getFileToCopy(File targetDirectory, File fileEach) {
return new File(targetDirectory, fileEach.getName());
}
private static void copyBytes(InputStream inputStream, OutputStream outputStream) throws IOException {
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
while (length > 0) {
outputStream.write(buffer, 0, length);
length = inputStream.read(buffer);
}
}
}
멀티스레드
프로세스와 스레드의 차이
스레드 : 프로그램의 실행 흐름
싱글 스레드 : 스레드가 하나뿐인 프로그램
멀티 스레드 프로그램 : 스레드가 둘 이상인 프로그램
멀티 스레드
e.g. 채팅 프로그램
A 하다가 B 하다가 C 하다가 -> 시간 지체가 될 수 있다
cpu의 코어가 하나인 경우
하지만 지금은 코어가 여러개이기 때문에 멀티 스레드 핸들이 가능하다 !
왜 쓰는가 정리
1. 업무 특성상 (필요한 로직일 때)
2. 성능상 (더 빠를 때)
Class DigitThread extends Thread {
public void run() {
for (int cnt =0; cnt < 10; cnt++){
System.out.print(cnt);
}
}
}
thread.start()
시작할 때는 run이 아니라 start를 한다.
runnable 상태로 하는 것이 우리가 할일이기 때문에 run을 직접적으로 호출하지 않는다. => thread를 runnable 상태로 만들어 놓는다.
sleep(1000) : 1초 동안 not runnable
스레드의 상태 분류
critical section : 스레드 실행 중에 다른 스레드로 제어가 넘어가면 문제를 일으킬 수 있는 부분
=>
동기화 synchronization : 다른 스레드가 간섭하지 못하도록
보장받기
synchronized 공유 객체 {
critical section들을 모아놓음
}
반응형
'교육 > Java&Spring' 카테고리의 다른 글
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 20 (0) | 2023.01.16 |
---|---|
java & spring 3 (0) | 2023.01.14 |
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 18 (0) | 2023.01.13 |
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 17 (1) | 2023.01.11 |
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 16 (0) | 2023.01.10 |