공유 객체 사용시 - 싱글 스레드의 경우는 고민할 경우가 거의 없다. - 멀티 스레드의 경우 스레드간의 하나의 객체 공유 시 디버깅하기 어려운 오류가 나타날 수 있다. Tread-1이 공유객체의 멤버변수에 할당된 값을 변경. -> 그사이 Thread-2가 공유 객체의 멤버변수에 할당된 값을(null이 아닌지 모르고) 엎어침. -> Thread-1 공유객체 사용하려는데 값이바뀜. -> 오류!! 이를 방지하기 위해 단 하나의 스레드만을 실행할 수 있는 임계영역을 지정해야 한다. 즉, 객체에 잠금을 걸어두어 하나의 스레드만이 접근가능하고 나머지 스레드는 대기하도록 만든다. 키워드 : synchronized 동기화(synchronized) 메소드 public synchronized void method(){ /..
스레드의 우선순위 동시성 : 멀티작업을 위해 하나의 코어에서 멀티 스레드가 번갈아가면서 실행하는 성질 병렬성 : 멀티작업을 위해 멀티 코어에서 개별 스레드를 동시에 실행하는 성질 스레드 스케줄링 - 스레드의 갯수가 코어의 수보다 많을 경우에 스레드를 어떤 순서에 의해 동시성으로 실행할 것인가에 대한 계획. - 아주 짧은 시간 스레드의 run 메소드를 번갈아가면서 실행한다. 우선순위(priority) 방식 - 우선순위가 높은 스레드가 실행상태를 더 많이 가져감. - 객체에 우선순위를 부여하여 개발자가 제어가능. - 1부터 10까지 우선순위, 높으면 먼저 실행 thread.setPriority(우선순위); 우선순위 상수 : Thread.MAX_PRIORITY(10), Thread.NORM_PRIORITY(5..
프로세스와 스레드 프로세스 운영체제에서는 실행중인 하나의 어플리케이션을 프로세스라고 함. 운영체제로부터 실행에 필요한 메모리를 할당받아 어플리케이션의 코드를 실행. 스레드 프로세스를 이루는 코드의 실행흐름. 하나의 스레드는 하나의 코드 실행흐름임. 멀티 프로세스 서로 독립적. 하나의 프로세스에서 오류가 발생하더라도 다른 프로세스에 영향을 미치지 않음. 멀티 스레드 하나의 프로세스 내부에 존재하기 때문에 하나의 스레드가 예외를 던지면 프로세스 하나가 아예 동작하지 않을 수 있음 -> 예외 처리 중요. 메인 스레드 자바 어플리케이션은 메인스레드가 main 메소드를 실행하면서 시작함. 스레드의 생성 1. Thread 클래스로부터 직접 생성 Thread thread = new Thread(Runnable tar..