Java 难以使用线程在给定范围内计算素数 public void run(){ System.out.println(“线程运行”); if(threadID==1){ 对于(int i=1000000;i

Java 难以使用线程在给定范围内计算素数 public void run(){ System.out.println(“线程运行”); if(threadID==1){ 对于(int i=1000000;i,java,multithreading,synchronization,Java,Multithreading,Synchronization,难以使用线程在给定范围内计算素数 public void run(){ System.out.println(“线程运行”); if(threadID==1){ 对于(int i=1000000;i

难以使用线程在给定范围内计算素数
public void run(){
System.out.println(“线程运行”);
if(threadID==1){
对于(int i=1000000;i<1250000;i++){
如果(i){
增量();
a++;
}
}
}else if(threadID==2){
对于(int i=1250000;i<1500000;i++){
如果(i){
增量();
b++;
}
}
}else if(threadID==3){
对于(int i=1500000;i<1750000;i++){
如果(i){
增量();
C++;
}
}
}否则{

对于(int i=1750000;i“
if(threadID==1){
”这假设线程ID是稳定的(它可能是稳定的,但您不显示它来自何处)。为什么不创建一个Runnable,它包含两个参数-开始和结束-以及它们之间的循环。“打印出不同的答案”您是如何读取
计数器
来打印它的?这是在一个相互同步的块中吗?请显示a,它将使您更容易识别您的问题。
public void run() {
  System.out.println("Thread running");
  if (threadID == 1) {
    for (int i = 1000000; i < 1250000; i++) {
      if (isPrime(i)) {
        increment();
        a++;
      }
    }
  } else if (threadID == 2) {
    for (int i = 1250000; i < 1500000; i++) {
      if (isPrime(i)) {
        increment();
        b++;
      }
    }
  } else if (threadID == 3) {
    for (int i = 1500000; i < 1750000; i++) {
      if (isPrime(i)) {
        increment();
        c++;
      }
    }
  } else {
    for (int i = 1750000; i <= 2000000; i++) {
      if (isPrime(i)) {
        increment();
        d++;
      }
    }
  }
}

public synchronized void increment() {
  counter++;
}