그런 다음 시리즈는 주로 미래의 검토 시간을 용이하게하고 잊지 방지하기 위해, 책 노트 및 관련 지식을 읽기 "의 분야에서 자바 동시성 '에 관한 것입니다. 직접 주제에 아도 :
제 1 장 동시 프로그래밍 과제
동시 프로그래밍의 목표는 프로그램 실행 속도가하는 것이 아니라 더 많은 스레드가 동시 실행을 극대화 할 수있는 프로그램을 만들 수 있습니다 시작하지 않는 것입니다. 하드웨어와 소프트웨어의 제약에 의해 제한 컨텍스트 전환 문제, 교착 상태, 및 자원 : 동시 프로그래밍과 같은 많은 도전을 직면하게 될 것이다.
1.1 문맥 전환
컨텍스트 스위치가 다음 작업에 스위치 다시하기 위해 작업의 상태를 저장하기 전에, 당신은이 상태로로드 할 수 있습니다. 하나의 작업에서 컨텍스트 스위치를 다시로드의 과정을 저장하는 것입니다.
하나는 특정 빨리 멀티 스레드?
꼭 그렇지는 않습니다. 약간의 시간이 걸릴 것이다 오버 스위칭 스레드 문맥 생성하기 때문이다.
2 방법 컨텍스트 스위칭을 줄이기
방법 : 스레드와 코 루틴의 사용을 최소화 아니오 동시 프로그래밍 잠금, CAS 알고리즘.
1.2 교착 상태
간단한 시나리오 봐 :
1 개 공용 클래스 DeadLockDemo { 2 개인 정적 문자열 A = "A" ; 3 개인 정적 스트링 B = "B" ; 4 공공 정적 무효 메인 (문자열 []에 args) { 5 새로운 DeadLockDemo () 교착 ().; 6 } 7 개인 공극 교착 () { 8 스레드 T1은 = 새로운 스레드 ( 신규 의 Runnable () { 9 @Override 10 publicvoid 실행 () { 11 동기화 (A) { 12 시도. {는 Thread.currentThread () 잠 (2000 ); 13 } 캐치 (의 InterruptedException E) { 14 e.printStackTrace (); 15 } 16 동기화 (B) { 17 에서 System.out.println ( "1" ); 18 } 19 } 20 } 21 }); 22 스레드 T2는 = 새로운 스레드 ( 신규 의 Runnable () { 23 @Override 24 publicvoid 실행 () { 25 동기화 (B) { 26 동기화 (A) { 27 에서 System.out.println ( "2"); 28 } 29 } 30 } 31 }); 32 t1.start (); 33 t2.start (); 34 } 35 }
이 코드는 교착, 스레드 T1과 서로 잠금을 해제하기를 기다리는 T2 스레드의 원인이됩니다.
피하기 교착 상태에 일반적인 방법 :
1) 고정을 방지하는 복수의 스레드를 획득하는 단계;
2) 동시에, 잠금 여러 자원을 점유 각 잠금 장치가 하나 개의 자원을 소요 있는지 확인하실 스레드를 피하십시오;
3) lock.tryLock (제한 시간을 이용하여) 대신에 내부 잠금을 사용하여 타임 로크를 사용하려고
4) 데이터베이스 잠금, 잠금 및 잠금 해제가 데이터베이스 연결해야합니다 그렇지 않으면 상황의 잠금을 해제 할 수 없게됩니다하십시오.
1.3 리소스 제약 도전
자원 제한 사항 : 동시 프로그래밍 동안, 프로그램 실행 속도는 컴퓨터 하드웨어 리소스 또는 소프트웨어 리소스에 의해 제한됩니다 말합니다.
자원 제약의 문제를 해결 :
1) 하드웨어 자원 제약 조건 프로그램의 병렬 실행의 클러스터 사용을 고려. 독립형 자원이 제한되어 있기 때문에, 다음 여러 컴퓨터에서 실행되는 프로그램을 보자;
2) 소프트웨어 자원 제약의 경우, 자원 풀 자원 재사용을 사용하는 것이 좋습니다.