정적 성형 변수 X 가 있 습 니 다. 초기 값 은 0 입 니 다. JAVA 로 네 개의 스 레 드 를 쓰 고 두 개 는 1 을 더 하고 두 개 는 1 을 줄 입 니 다. X 는 0 일 때 줄 이지 않 습 니 다. X 는 5 시 에 프로그램 을 끝 냅 니 다.

2059 단어 자바thread
제목:
정적 성형 변수 X 가 있 습 니 다. 초기 값 은 0 이 고 JAVA 로 네 개의 스 레 드 를 쓰 고 두 개 는 1 을 더 하고 두 개 는 1 을 줄 이 며 X 는 0 일 때 줄 이지 않 습 니 다. X 는 5 시 에 프로그램 을 끝 냅 니 다.
나의 실현 방식:
import java.util.Random;

public class StaticThread {
	private static int X=0;
	private static Random rd=new Random();
	public synchronized static void add(){
		if(X!=0){
			StaticThread.class.notifyAll();
		}
		X++;
		System.out.println(Thread.currentThread().getName()+": "+"add x: "+X);
	}
	
	public synchronized static void substract(){
		try{
		if(X==0){
			StaticThread.class.wait();
		}
		}catch(InterruptedException e){
			
		}
		X--;
		System.out.println(Thread.currentThread().getName()+": "+"substract x: "+X);

	}
	
	static class StaticAddThread extends Thread{
		public void run(){
			while(true){
				if(X==5){
					System.out.println("X=5");
					System.exit(0);
				}
				add();
				try{
					Thread.sleep(rd.nextInt(1000));
				}catch(InterruptedException e){
					
				}
			}
			
		}
	}
	
	static class StaticSubstractThread extends Thread{
		public void run(){
			while(true){
				if(X==5){
					System.out.println("X=5");
					System.exit(0);
				}
				substract();
				try{
					Thread.sleep(rd.nextInt(1000));
				}catch(InterruptedException e){
					
				}
			}
	}
	}
	
	public static void main(String[] args){
		StaticAddThread sat1=new StaticAddThread();
		StaticAddThread sat2=new StaticAddThread();
		
		StaticSubstractThread sst1=new StaticSubstractThread();
		StaticSubstractThread sst2=new StaticSubstractThread();
		
		sat1.start();
		sst1.start();
		sat2.start();
		sst2.start();

	}
}

 
 

좋은 웹페이지 즐겨찾기