有一静态整形变量X,初始值为0,用JAVA写四个线程,二个对其加1,二个对其减一,X等于0时不进行减操作,X等 ...

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:26   1757   0

题目:

有一静态整形变量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();

 }
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP