자바 다 중 스 레 드 기초 (4) 자바 전통 스 레 드 동기 화 통신 기술
5021 단어 자바다 중 스 레 드스 레 드 통신synchroniz
코드 를 작성 하여 다음 과 같은 기능 을 실현 합 니 다.
하위 스 레 드 는 10 회 순환 하고, 이 어 주 스 레 드 는 100 회 순환 하 며, 이 어 다시 하위 스 레 드 로 10 회 순환 하고, 이 어 다시 주 스 레 드 로 100 회 순환 하 며, 이렇게 50 회 순환 합 니 다.
분석 하 다.
1) 하위 스 레 드 10 회 순환 과 주 스 레 드 100 회 순환 은 서로 배척 하 는 실행 이 어야 하 며 교차 가 발생 해 서 는 안 됩 니 다. 아래 코드 에서 synchronized 키 워드 를 통 해 이 요 구 를 실현 합 니 다.2) 서브 스 레 드 와 메 인 스 레 드 는 반드시 교체 되 어야 하 며 스 레 드 동기 통신 기술 을 통 해 이 루어 질 수 있 습 니 다. 아래 코드 에서 bhouldSub 변 수 를 통 해 이 요 구 를 실현 할 수 있 습 니 다.
기타 주의해 야 할 점
1) 그 중에서 business 변 수 는 final 형식 이 라 고 밝 혀 야 합 니 다. 익명 내부 류 와 부분 내부 류 에서 호출 된 부분 변 수 는 final 이 어야 하기 때 문 입 니 다. - 변수의 일치 성 (컴 파일 할 때 final 변 수 는 부분 내부 류 의 변수 로 복 사 됩 니 다) -또한 국부 변수의 생명 주기 와 국부 내부 류 의 대상 의 생명 주기 가 일치 하지 않 는 것 을 피한다.
그렇지 않 으 면 - 이 변수 가 국부 내부 클래스 에 전 달 된 후에 국부 변수 가 외부 클래스 에서 수정 되면 내부 클래스 에서 이 변수의 값 이 외부 클래스 와 일치 하지 않 아 예측 할 수 없 는 상황 이 발생 할 수 있 습 니 다.또는 국부 변수의 생명주기 가 방법의 끝 에 따라 창고 에서 제거 되 고 국부 내부 클래스 가 존재 하지 않 는 변수 에 접근 합 니 다.멤버 변수 라면 final 이 필요 없습니다.
자세 한 내용 은 다음 과 같은 문장 을 참고 할 수 있다.http://feiyeguohai.iteye.com/blog/1500108 http://blog.csdn.net/whuslei/article/details/6251020 2) 내부 유형 은 구성원 내부 유형, 정태 내부 유형, 국부 내부 유형, 익명 내부 유형 네 가지 로 나 뉘 는데 네 가지 수명 주기 와 상세 한 사용 방법 은 구 글 이나 도 모 에 게 스스로 물 어보 세 요.
코드 구현
package cn.king;
public class TraditionalThreadCommunication {
public static void main(String[] args) {
// final
final Business business = new Business();
new Thread(
new Runnable() {
@Override
public void run() {
for(int i=1; i<=50; i++) {
business.sub(i);
}
}
}
).start();
for(int i=1; i<=50; i++) {
business.main(i);
}
}
}
class Business {
//
private boolean bShouldSub = true;
public synchronized void sub(int i) {
if(!bShouldSub) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int j=1; j<=10; j++) {
System.out.println("sub thread sequence of "
+ j + ", loop of " + i);
}
bShouldSub = false;
this.notify();
}
public synchronized void main(int i) {
if(bShouldSub) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int j=1; j<=100; j++) {
System.out.println("main thread sequence of "
+ j + ", loop of " + i);
}
bShouldSub = true;
this.notify();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.