当前位置: 首页 > 知识库问答 >
问题:

方法无法从变量获取更新的值

闻人宇定
2023-03-14
 public NumberWords(int activeThread) {
  this.activeThread = activeThread;
 }

 public synchronized void incTotalWordCount(int n) {
  totalWordCount += n;
  System.out.println("The total word count is " + totalWordCount);
 }

 public synchronized void printCount() {
  System.out.println("The total word count(print count) is " + totalWordCount);
 }

 public synchronized void decActiveThread() {
  getThreadName = Thread.currentThread().getName();
  System.out.println(getThreadName);

  if (Thread.getAllStackTraces().keySet().size() != 0) {
   // Get number of active threads
   activeThread = Thread.getAllStackTraces().keySet().size();

   activeThread--;
   if (activeThread == 0) {
    System.out.println("The total number of word in the three files is " + totalWordCount);
    System.out.println("The active threads is/are " + activeThread);
   }
  }
 }
}
    import java.io.FileReader;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;

public class ReadFile1 extends Thread implements Runnable {
 private NumberWords nw;
 public ReadFile1(NumberWords nw) {
  this.nw = nw;
 }

 //set file path
 String path1 = System.getProperty("user.dir") + File.separator + "text1.txt";
 BufferedReader br1 = null;

 public void run() {
  try {
   br1 = new BufferedReader(new FileReader(path1));

   String contentLine = br1.readLine();

   while (contentLine != null) {

    // Count number of words
    String[] parts = contentLine.split(" ");
    int count = 0;
    for (int i = 0; i < parts.length; i++) {
     count++;
    }
    // Check number of words counted.
    System.out.println("The number of words in file(text1.txt) is " + count);

    //Pass words count to sum
    nw.incTotalWordCount(count);
    contentLine = br1.readLine();
   }
  } catch (IOException ioe) {
   ioe.printStackTrace();
  } finally {
   try {
    if (br1 != null) {
     br1.close();
    }
   } catch (IOException ioe) {
    System.out.println("Error in closing the BufferedReader");
   }
  }
 }
}

主类:

public class TestReadFile {
public static void main(String args[]){

NumberWords nw = new NumberWords(args.length);

Thread rf1 = new Thread(new ReadFile1(nw));   
Thread rf2 = new Thread(new ReadFile2(nw));
Thread rf3 = new Thread(new ReadFile3(nw));

    rf1.start();
    rf2.start();
    rf3.start();

    //Get total word cont
    nw.decActiveThread();

  }
}

共有1个答案

谯嘉胜
2023-03-14

这样怎么样:

    public class NumberWords {
    private int totalWordCount;
    private int activeThreads;


    public synchronized void incTotalWordCount(int n) {
        totalWordCount += n;
        activeThreads--;
        System.out.println("The total word count is " + totalWordCount);
    }

    public synchronized void printCount() {
        System.out.println("The total word count(print count) is " + totalWordCount);
    }

    public int getActiveThreads() {
        return activeThreads;
    }

    public void setActiveThreads(int activeThreads) {
        this.activeThreads = activeThreads;
    }
}

ReadFile:

import java.io.BufferedReader;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;

    public class ReadFile implements Runnable {
        private NumberWords nw;
        private Path filePath;

        public ReadFile(NumberWords nw, Path filePath) {
            this.nw = nw;
            this.filePath = filePath;
        }

        BufferedReader br1 = null;

        public void run() {
            try {
                int count = 0;
                for (String line : Files.readAllLines(filePath)) {
                    String[] parts = line.split(" ");
                    for (String w : parts) {
                        count++;
                    }
                }
                nw.incTotalWordCount(count);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

主要:

import java.io.File;
import java.nio.file.Paths;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {
    public static void main(String args[]) throws InterruptedException {

        NumberWords nw = new NumberWords();

        ExecutorService execSvc = Executors.newCachedThreadPool();

        new Thread(new ReadFile(nw, Paths.get(System.getProperty("user.dir") + File.separator + "text1.txt"))).start();
        new Thread(new ReadFile(nw, Paths.get(System.getProperty("user.dir") + File.separator + "text2.txt"))).start();
        new Thread(new ReadFile(nw, Paths.get(System.getProperty("user.dir") + File.separator + "text3.txt"))).start();
        nw.setActiveThreads(3);
        while (nw.getActiveThreads() > 0) {
            Thread.sleep(100);
            System.out.println("Waiting for Tasks to complete!");
        }
        nw.printCount();

    }
}
 类似资料:
  • 下面有一个程序,我正在调用getTotalPasserian(pm)方法,但在获取用户输入的值时遇到了问题。 pm=0、cm=0、pi=0、ci=0、ps=0、cs=0,或者当我试着做pm=gettotalposysers(pm=0)时,它可以工作,但没有向用户显示主菜单printmenu.menu();从上面除了system.out.println(“输入来自马耳他的乘客总数:”);首先从方法中

  • 在业务规则任务之后,我放置了一个简单的脚本任务: 我现在得到的输出是(注意:MyCustomObject不重写toString): 内存中对象的值:MyCustomObject@XYZ 欢迎提出任何建议。

  • 问题内容: 在Jenkins中,我希望获得用户输入并将其传递给Shell脚本以供进一步使用。 我尝试将其设置为环境变量,但是shell脚本无法获取最新值,而旧值是echo。 问题答案: 您需要在阶段之间传递变量作为环境变量,例如:

  • 我正在解决Cplex中的医院员工日程安排问题,我是Cplex的新手。 但Cplex无法配置决策变量的答案。 我想可能是我的模型设计问题。 这是一个很长的模型。 如果我能得到帮助,我将不胜感激。 模型 --设置: {string}E=...;//经验等级集(高级,新秀) {字符串}I=…;//全套医生 {string}为=//具有S级经验的一组医生 {字符串}Ir=//具有R级经验的一组医生 {字符

  • 问题内容: 我有主GUI线程,其中有一个JprogressBar,并且正在实现ProprtyChangeListener。 当按下按钮时,扩展SwingWorker的其他类将开始执行并执行一系列可能很长的计算。我需要A类中的进度条以根据B类中的变量来呈现进度。 我的代码在下面(我所有失败的尝试都可能有点混乱…) 将不胜感激。 GUI类别: 计算类: 编辑 原始问题仍然存在。出于某种原因,进度条仍然

  • 我在更改联系人对象中的变量值时遇到问题。我正在尝试制作一个联系人列表,但我无法更改变量trach方法的值。我有editTouch方法调用change eName方法,这两个方法都传递了ArrayList对象trach引用,所以它不应该在main方法中更改值trach ArrayList时出现问题,但问题是当我想更改对象的名称时它不会更改它。我这里缺少什么吗?