题目:
有一静态整形变量X,初始值为0,用JAVA写四个线程,二个对其加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();
}
}
|