Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不同实例的多线程处理仍然产生相同的结果,如何克服这一问题? 公共类多线程域{ 公共静态void main(字符串[]args)引发InterruptedException{ MultiThreadingRandom MultiThreadingRandom=新的MultiThreadingRandom(); ExecutorService ExecutorService=Executors.newFixedThreadPool(2); geneRan r1=新geneRan(); geneRan r2=新geneRan(); 执行器服务提交(r1); 执行器服务提交(r2); executorService.shutdown(); } } 类geneRan实现可运行的{ int rand_int1=0; @凌驾 公开募捐{ //如何实现此方法 Random rand=新的Random(); rand_int1=rand.nextInt(1000); 系统输出打印LN(rand_int1); //System.out.println(ai.getAndIncrement()); } }_Java - Fatal编程技术网

Java 不同实例的多线程处理仍然产生相同的结果,如何克服这一问题? 公共类多线程域{ 公共静态void main(字符串[]args)引发InterruptedException{ MultiThreadingRandom MultiThreadingRandom=新的MultiThreadingRandom(); ExecutorService ExecutorService=Executors.newFixedThreadPool(2); geneRan r1=新geneRan(); geneRan r2=新geneRan(); 执行器服务提交(r1); 执行器服务提交(r2); executorService.shutdown(); } } 类geneRan实现可运行的{ int rand_int1=0; @凌驾 公开募捐{ //如何实现此方法 Random rand=新的Random(); rand_int1=rand.nextInt(1000); 系统输出打印LN(rand_int1); //System.out.println(ai.getAndIncrement()); } }

Java 不同实例的多线程处理仍然产生相同的结果,如何克服这一问题? 公共类多线程域{ 公共静态void main(字符串[]args)引发InterruptedException{ MultiThreadingRandom MultiThreadingRandom=新的MultiThreadingRandom(); ExecutorService ExecutorService=Executors.newFixedThreadPool(2); geneRan r1=新geneRan(); geneRan r2=新geneRan(); 执行器服务提交(r1); 执行器服务提交(r2); executorService.shutdown(); } } 类geneRan实现可运行的{ int rand_int1=0; @凌驾 公开募捐{ //如何实现此方法 Random rand=新的Random(); rand_int1=rand.nextInt(1000); 系统输出打印LN(rand_int1); //System.out.println(ai.getAndIncrement()); } },java,Java,这个程序有时给出两个不同的输出,但有时给出相同的输出 实际上,我在这两个线程中使用了两个不同的对象,所以为什么在某些情况下它会给出相同的结果 无论如何,我只传递了两个不同的对象的线程安全代码。那么我如何保证在任何情况下生成2个不同的随机数。如前所述,这与多线程无关。因为这些数字是随机的,所以它们也有可能是相同的 如果你想要两个不同的随机数,你可以这样做: //创建整数列表 List numberPool=new ArrayList(); //使用1到1000之间的数字初始化列表 对于(int n

这个程序有时给出两个不同的输出,但有时给出相同的输出

实际上,我在这两个线程中使用了两个不同的对象,所以为什么在某些情况下它会给出相同的结果


无论如何,我只传递了两个不同的对象的线程安全代码。那么我如何保证在任何情况下生成2个不同的随机数。

如前所述,这与多线程无关。因为这些数字是随机的,所以它们也有可能是相同的

如果你想要两个不同的随机数,你可以这样做:

//创建整数列表
List numberPool=new ArrayList();
//使用1到1000之间的数字初始化列表
对于(int num=1;num

import java.util.Random;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MultiThreadingRandom {
   public static void main(String[] args) throws InterruptedException, ExecutionException {
      ExecutorService executorService = Executors.newFixedThreadPool(2);
      Generun r1 = new Generun();
      executorService.submit(r1);
      Thread.sleep(100);
      executorService.submit(r1);
      executorService.shutdown();

   }
}

class Generun implements Runnable {
   int nextInt = -1;
   int bound = 1000;

   @Override
   public void run() {
      int temp = nextInt;

      nextInt = new Random().nextInt(bound);

      if (temp == nextInt) {
         do {
            nextInt = new Random().nextInt(bound);
         } while (temp == nextInt);
      }
      System.out.println(nextInt);
   }
}

它们是随机的,所以它们会随机打印出相同的值。与多线程无关。是的,Thread.sleep在这种情况下有效,但我希望两个线程同时运行。但由于它们是不同的对象,所以应该保证不同的结果。但在本例中,我使用了random,但假设它的序列来自DB。我不想要s任何运行的顺序都应该相同。这最终会导致
IndexOutOfBoundsException
崩溃,但修复这一问题可能会留给读者作为练习。@Haem,是的,当然,只是想展示一下一般的想法。如果您想要从1到1000的唯一随机数,则不应调用
getRandomNumber()
超过1000次。