线程的协作取消方式JAVA

public class PrimeGenerator implements Runnable{
    
    
  private final List<Integer> primes = new ArrayList<>();
  private volatile boolean cancelled;

  public void run(){
    
    
    BigInteger p = BigInteger.ONE;
    while(!cancelled){
    
    
      p = p.nextProbablePrime();
      synchronized(this){
    
    
        primes.add(p);
      }
    }
  }

  public void cancel(){
    
     cancelled = true;}

  public synchronized List<BigInteger> get(){
    
    
    return new ArrayList<BigInteger>(primes);
  }
}

List<BigInteger> aSecondOfPrimes() throws InterruptedException{
    
    
  PrimeGenerator generator = now PrimeGenerator();
  new Thread(generator).start();
  try{
    
    
    SECONDS.sleep(1);
  }finally{
    
    
    generator.cancel();
  }
  return generator.get();
}

猜你喜欢

转载自blog.csdn.net/weixin_37632716/article/details/118311845