자바 다 중 스 레 드 시 뮬 레이 션 티켓 팅 프로그램 과 스 레 드 보안 문제
수요:아 날로 그 3 개 창 에서 동시에 100 장의 표를 판매 합 니 다.
문제 1:왜 100 장 이 300 장 이 팔 렸 습 니까?
원인:tickets 는 비정 상 이기 때문에 비정 상 구성원 변수 데 이 터 는 모든 대상 에서 하나의 데 이 터 를 유지 하고 세 개의 스 레 드 대상 은 세 개 입 니 다.
솔 루 션:tickets 표 수 를 공유 하여 세 개의 스 레 드 대상 에 게 사용 합 니 다.static 수식 을 사용 합 니 다.
문제 2:스 레 드 안전 문제 가 발생 했 습 니까?
스 레 드 안전 문제 의 해결 방안:sun 은 스 레 드 동기 화 체 제 를 제공 하여 우리 로 하여 금 이런 문 제 를 해결 하 게 한다.
자바 스 레 드 동기 화 메커니즘 의 방식:
방식 1:동기 코드 블록
방식 2:동기 함수
class SellTickets extends Thread{
static int tickets=1;// static。 , 。 。
public SellTickets(String threadName) {
super(threadName);
}
public void run() {
while(true){
synchronized (" ") {
if(tickets==101){// if(tickets>100){
System.out.println(" -_-...");
break;
}
System.out.println(Thread.currentThread().getName()+" "+tickets+" ");
tickets++;
/*
if(tickets==101){ // 。 ticket==101 , 。 tickets++。
break;
}
/*
if(Thread.currentThread().getName().equals(" 2")){ // 2 ,
break;
}
*/
}
//System.out.println(Thread.currentThread().getName()+" ...");
}
}
}
public class Demo4 {
public static void main(String[] args) {
// ,
SellTickets s1=new SellTickets(" 1");
SellTickets s2=new SellTickets(" 2");
SellTickets s3=new SellTickets(" 3");
//
s1.start();
s2.start();
s3.start();
System.out.println("main ...");
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.