본문 바로가기

분류 전체보기407

자바의 정석10-5 쓰레드의 동기화(Synchronization) 쓰레드의 동기화(synchronization) - 한 쓰레드가 진행 중인 작업을 다른 쓰레드가 간섭하지 못하도록 막는 것 - 멀티 쓰레드 프로세스에서는 다른 쓰레드의 작업에 영향을 미칠 수 있다. -> 진행 중인 작업이 다른 쓰레드에게 간섭 받지 않게 하려면 ‘동기화’가 필요 - 동기화하려면 간섭 받지 않아야 하는 문장들을 ‘임계 영역’으로 설정 - 임계영역은 락(lock)을 얻은 단 하나의 쓰레드만 출입가능(객체 1개에 락 1개) synchronized를 이용한 동기화 - synchronized로 임계영역(lock이 걸리는 영역)을 설정하는 방법 2가지 -> 한 번에 한 쓰레드만 사용할 수 있기 때문에 영역을 최소화 해야함 1번은 synchronized메서드가 호출된 시점부터 해당 메서드가 포함된 객체.. 2022. 1. 13.
자바의 정석10-4 데몬 쓰레드(daemon thread)와 쓰레드의 실행제어 데몬 쓰레드(daemon thread) - 일반 쓰레드(non-daemon thread)의 작업을 돕는 보조적인 역할 수행 - 일반 쓰레드가 모두 종료되면 자동적으로 종료된다. - GC(Garbage Collector), 자동저장, 화면 자동갱신 등에 사용된다. - 무한루프와 조건문을 이용해서 실행 후 대기하다가 특정조건이 만족되면 작업을 수행하고 다시 대기하도록 작성한다. - 데몬 쓰레드는 쓰레드를 생성한 다음 실행하기전에 setDaemon(true)를 호출하기만 하면 된다. boolean isDaemon( ) 쓰레드가 데몬쓰레드인지 확인한다. 데몬 쓰레드이면 true를 반환 void setDaemon (boolean on) 쓰레드를 데몬 쓰레드로 또는 사용자 쓰레드로 변경. 매개변수 on을 true로.. 2022. 1. 13.
자바의 정석10-3 쓰레드의 우선순위와 쓰레드 그룹 쓰레드의 우선순위(priority of thread) - 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 하여 특정 쓰레드가 더 많은 작업시간을 갖게 할 수 있다. - 쓰레드는 우선순위라는 속성(멤버변수)를 갖고 있는 데 이 우선순위의 값에 따라 쓰레드가 얻는 실행시간이 달라진다. 쓰레드의 우선순위 지정하기(메서드와 상수) -> 쓰레드가 가질 수 있는 우선순위의 범위는 1~10이며 숫자가 높을수록 우선순위가 높다. -> 쓰레드의 우선순위는 쓰레드를 생성한 쓰레드로부터 상속받음(main메서드를 수행하는 쓰레드는 5이므로 main메서드 내에서 생성하는 쓰레드의 우선순위는 자동적으로 5가 됨) 예제1) public class Ex13_6 { public static void main(String[] args).. 2022. 1. 13.
자바의 정석10-2 싱글쓰레드와 멀티쓰레드, 쓰레드의 I/O 블락킹 싱글쓰레드와 멀티쓰레드 두 개의 쓰레드로 작업한 시간이 싱글쓰레드로 작업한 시간보다 더 걸리게 되는데 그 이유는 쓰레드간의 작업전환(context switching)에 시간이 걸리기 때문 -> 단순히 CPU만을 사용하는 계산작업은 오히려 멀티쓰레드보다 싱글쓰레드로 프로그램하는 것이 더 효율적!! 예제) ' - ' 를 출력하는 작업과 ' | '를 출력하는 작업을 하나의 쓰레드가 연속적으로 처리하는 시간을 측정하는 예제(싱글쓰레드 프로세스) class Ex13_2 { public static void main(String[] args) { long startTime = System.currentTimeMillis(); //1번 작업 수행 for(int i=0; i < 100; i++) System.out.p.. 2022. 1. 12.
자바의 정석10-1 프로세스와 쓰레드 프로세스와 쓰레드(process & thread) - 프로세스: 실행 중인 프로그램, 자원(resources데이터와 메모리)과 쓰레드로 구성 - 쓰레드: 프로세스 내에서 실제 작업을 수행. 모든 프로세스는 최소한 하나의 쓰레드를 가지고 있다. (쓰레드가 없으면 작업을 수행할 수 없음) 프로세스: 쓰레드 = 공장 : 일꾼 - 멀티쓰레드: 여러 작업을 동시에 나눠서 수행 가능(작업을 보다 효율적으로 처리 가능) -> “하나의 새로운 프로세스를 생성하는 것보다 하나의 새로운 쓰레드를 생성하는 것이 더 적은 비용이 든다.” -> 대부분의 OS는 멀티태스킹(다중작업)을 지원하기 때문에 여러 개의 프로세스가 동시에 실행 가능 -> 메신저로 파일을 다운로드 받거나 음성 대화를 나눌 수 있는 것이 바로 멀티쓰레드로 프.. 2022. 1. 12.
자바의 정석9-4 애너테이션(annotation) 애너테이션이란? - 주석처럼 프로그래밍 언어에 영향을 미치지 않고, 유용한 정보를 제공 - 원래 소스코드와 문서가 따로 있었지만 관리하기 편하게 하기 위해서 소스코드 + 문서를 합침 - 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것 - 애너테이션의 사용예 - Java에서 제공하는 애너테이션 -> 메타애너테이션(@Target*, @Documented, @inherited, @Retention, @Repeatable): 애너테이션을 만들 때 사용하는 애너테이션 표준애너테이션 1. @Override - 오버라이딩을 올바르게 했는지 컴파일러가 체크하게 한다.(for javac.exe) - 오버라이딩 할 때 메서드 이름을 잘못 적는 실수를 하는 경우가 많기 때문에 clas.. 2022. 1. 12.