반응형 전체 글256 chap_12. 동기화 기존 쓰레드 시간에 학습한 예제를 볼 때 직원 1, 직원 2 가 각각 방을 청소하면서 방 청소 순서가 섞여서 진행되었다. 이번에는 방을 순차적으로 청소하도록 동기화를 활용해보자. 위와 같이 Room 클래스를 별도로 생성하여 직원 1, 2가 5개의 방씩 순차적으로 청소하도록 하였다. 하지만 실행결과를 보면 아래와 같이 1번방이 두번 청소된 것을 볼 수 있다. 두개의 쓰레드가 동시에 실행되면서 발생하는 오류이다. 동기화를 활용해 한 쓰레드가 실행중이면 다른 쓰레드가 접근하지 못하도록 개선 해보자. Room 클래스의 clean() 메소드 앞에 synchronized 를 추가해주면 동기화되어 여러개의 쓰레드가 동시에 접근하지 못한다. 2023. 7. 11. chap_12. Thread와 Runnable, Join, MultiThread 일반적으로 실행가능한 프로그램은 .exe 형태로 만들어져있다. 그리고 프로그램을 실행함으로써 현재 돌아가고 있는 상태를 프로세스라고 한다. 해당 프로세스 자원을 이용해 작업을 수행하는 것을 쓰레드라고 한다. 일반적으로 프로세스는 여러개의 쓰레드를 가질 수 있지만, 따로 쓰레드 처리를 해주지 않으면 Java는 하나의 프로세스가 하나의 쓰레드만을 가지며 순차적으로 수행한다. 위와 같이 1명이 1~10번방 청소를 혼자 순차적으로 진행하도록 하였다. 이번에는 청소를 할 사람 2명으로 늘려서 2개의 쓰레드를 처리해보자. 우선 CleanThread 라는 클래스를 별도로 생성하여 직원이 홀수방을 청소를 수행하는 메소드를 생성하였다. 그리고 사장님이 짝수방을 청소하는 cleanByBoss() 메소드를 생성하였다. cl.. 2023. 7. 11. chap_11. 예외처리미루기(Throws) 위와 같이 test.txt 파일을 불러오기를 시도하는 구문을 생성하였다. 오류가 발생되면 "파일 쓰기에 실패했습니다.", "writeFile 메소드 내에서 자체해결하였습니다."가 출력된다. writeFile() 메소드를 실행하는 동안 오류가 발생하였을 때 해당 메소드 내에서 자체적으로 예외처리 할 수도 있고 throws를 이용해 메소드를 호출한 위치에서 예외처리하도록 만들 수도 있다. 2023. 7. 10. chap_11. 사용자 정의 예외 이전 시간에 throw를 학습하면서 위와 같은 예제를 학습하였다. 이는 age 값을 17로 설정하고 age 2023. 7. 10. chap_11. Finally 구문 / Try With Resources try 구문이 정상적으로 실행되건, 예외 오류가 발생되건 결과와 상관 없이 finally 로 설정한 구문은 반드시 실행된다. 보통 Finally 구문은 try 내에서 작업하던 내용을 정리할 때 사용한다. (Ex. 파일을 열었다면 Finally를 통해 파일을 닫는다. / 임시파일을 생성하였다면 Finally를 통해 임시파일을 삭제한다.) Try 구문은 아래와 같이 여러 유형으로 생성할 수 있다. * try + catch / try + catch + finally / try+ finally 아래와 같이 catch 구문 없이 try + finally 유형으로도 생성할 수 있는 점을 참고하자. 임시 파일을 쓰는 클래스를 만들어 예시를 학습해보자. 위와 같이 MyFileWirter 객체를 생성하여 파일에 내용을 .. 2023. 7. 10. chap_11. 예외처리 (Try Catch) / 예외발생시키기(Throw) Java 프로그램 내에서 예상치 못한 상황이 발생됐을 때를 대비하여 예외처리가 필요하다. * 컴파일 오류 : 코드에 문제가 있어 프로그램이 실행되지 않는 경우 * 런타임 오류 : 컴파일은 작동되나 실행과정에서 오류가 발생되는 경우 런타임 오류는 크게 에러 error 와 예외 exception 이 있다. 에러 : 작성한 소스코드를 통해 수습할 수 없는 사례(메모리, 스택오버플로우 등) 예외 : 소스코드를 통해 수습할 수 있는 사례(지정 경로가 잘못된 경우, 호출한 객체가 없는 경우 등) 예를 들어 3/0을 실행하면 숫자를 0으로 나눌 수 없으므로 오류가 발생된다. 위의 try catch 구문을 통해 작성하게 되면 실제 3/0은 실행되지 않았지만 catch 구문으로 오류를 출력하였으므로 "프로그램 정상 종료.. 2023. 7. 10. 이전 1 ··· 4 5 6 7 8 9 10 ··· 43 다음 반응형