동시 다발 총화 (1)

동시 다발 총화 (2)
자바 는 순서 형 언어 를 바탕 으로 스 레 드 에 대한 지원 을 제공 합 니 다. 스 레 드 체 제 는 실행 프로그램 이 표시 하 는 단일 프로 세 스 에서 작업 을 만 듭 니 다. 자바 의 스 레 드 체 제 는 선점 식 입 니 다. 스 케 쥴 러 체 제 는 주기 적 으로 스 레 드 를 중단 하고 컨 텍스트 를 다른 스 레 드 로 전환 합 니 다. 모든 스 레 드 에 시스템 시간 편 입 니 다.모든 스 레 드 를 합 리 적 인 시간 으로 나 누 어 그의 임 무 를 구동 할 것 이다.
1. 스 레 드 사용
스 레 드 는 임 무 를 구동 할 수 있 기 때문에 우 리 는 임 무 를 묘사 해 야 한다.
Runnable 인 터 페 이 스 를 실현 합 니 다. run () 방법 을 작성 합 니 다. 그러나 이러한 방법 은 스 레 드 를 만 들 능력 이 없습니다. 스 레 드 행 위 를 실현 하려 면 이 작업 을 스 레 드 에 첨부 해 야 합 니 다. 이 방식 은 그 를 Thread 에 제출 하 는 것 입 니 다.
thread 의 start 방법 을 실행 한 후 빠르게 돌아 갑 니 다.
4. 567913. 생 성 된 class 에서 우 리 는 이 렇 습 니 다.

	public static void main(String[] args) {
		Thread t1=new Thread(new TestRunnable());
		t1.start();
	}

Runnable 은 독립 된 작업 으로 되 돌아 오 는 값 이 없습니다. 되 돌아 오 기 를 원한 다 면 callable 인 터 페 이 스 를 사용 할 수 있 습 니 다. 단, 이것 은 executorService 의 submit 를 사용 해 야 합 니 다.
invokevirtual
return
public class TestCallable implements Callable<String> {

	public String call() throws Exception {
		Thread.sleep(50);
		return Thread.currentThread().getName();
	}

}

future 의 get 방법 을 사용 할 때 스 레 드 가 실행 되 지 않 으 면 결과 가 돌아 오 는 것 을 막 을 수 있 습 니 다. isDone 으로 완료 여 부 를 확인 할 수 있 습 니 다.
또한 스 레 드 를 실현 하 는 방법 은 Thread 를 직접 계승 하여 run 방법 을 쓰 고 start. Thread 를 호출 하 는 start 방법 은 run 방법 을 직접 호출 합 니 다.
2. 스 레 드 의 위험.
스 레 드 를 사용 하 는 위험 은 그의 장점 만큼 적지 않다.
가장 중요 한 위험 은 모두 가 알 고 있 는 안전 위험 이다.
예 를 들 면 한 가지 방법.
public static void main(String[] args) {
		ExecutorService executorService= Executors.newCachedThreadPool();
		List<Future<String>> results=new ArrayList<Future<String>>();
		for(int i=0;i<10;i++){
			results.add(executorService.submit(new TestCallable()));
		}
		for(Future<String> s:results){
			try {
				System.out.println(s.get());
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (ExecutionException e) {
				e.printStackTrace();
			}
		}
	}

다 중 스 레 드 가 실 행 될 때 호출 방법 으로 얻 은 값 이 같은 경우 가 있 을 수 있 습 니 다.
이 럴 때 같은 값 을 받 을 수 있 습 니 다. 물론 재 정렬 이 가능 하기 때문에 상황 이 더 나 빠 질 수도 있 습 니 다.
이러한 위험 은 경쟁 조건 입 니 다. 스 레 드 간 에 같은 메모리 주소 공간 을 공유 하고 동시에 실행 하기 때문에 다른 스 레 드 가 사용 하거나 수정 하고 있 는 변 수 를 방문 하거나 수정 할 수 있 습 니 다.
이런 위험 을 예방 하기 위해 서 는 방문 을 조율 하 는 동기 화 체제 가 필요 하 다.
예 를 들 어 synchronized 키 워드 를 추가 합 니 다.
public class GetSequence {
	private int value;
	public int getValue(){
		return value++;
	}
}

또 하나의 위험 은 활약 도 위험 이다. 한 활동 이 그 가 영원히 실행 할 수 없 을 때 활약 도 실패 가 발생 한다.
주로 우리 가 자주 듣 는 자물쇠, 그리고 자물쇠, 배 고 픔 이 있다.
다 중 스 레 드 는 우리 에 게 성능 상의 좋 은 점 을 가 져 다 줄 수 있 고 성능 상의 위험 도 가 져 다 줄 수 있 습 니 다. 예 를 들 어 컨 텍스트 전환 시 빈번 한 전환 은 시스템 에 커 다란 비용 을 가 져 다 줄 수 있 습 니 다. 예 를 들 어 저장, 스 레 드 의 컨 텍스트 회복, cpu 도 스 레 드 의 스케줄 링 에 소비 하 는 등 성능 비용 을 가 져 다 줄 수 있 습 니 다.
또 좀 썼어 요. 주소 가 위 에 보 여요.

좋은 웹페이지 즐겨찾기