-2

下面是我的文本文件 test1.txt。

AutoRefreshStoreCategories  70%  1  16  2060    10053   10106   10111
CrossPromoEditItemRule      20%  1  10107   10108   10109
CrossPromoManageRules       10%  1  10107   10108   10109                                                                                                

我想编写一个多线程程序,它可以逐行读取文件并通过在空格上拆分来打印一行中的每个数字(我已经完成了这部分)。在上面的文件中,我在命令名称旁边指定了一些百分比,第一行的示例,它在AutoRefreshStoreCategories旁边有 70% 。所以我希望 70% 的随机调用都转到第一行。以同样的方式第二行有 20%,所以 20% 的随机调用转到第二行。最后,对于第三行,10% 的随机调用转到第三行。对于每一行,基本上我想打印它们在每一行中的数字。

所以我在下面写了一个多线程程序,但那个程序只是打印每一行的数字,它没有考虑随机调用的百分比。我不确定我可以有什么逻辑,以便通过使用该多线程程序,我可以指定这么多百分比的随机调用转到第一行、第二行或第三行。任何帮助将不胜感激。

    public class ExcelRead {

    private static Integer threadSize = 4;

    public static void main(String[] args) {

        for (int i = 1; i <= threadSize; i++) {
            new Thread(new ThreadTask(i)).start();
        }
    }
}


class ThreadTask implements Runnable {
    private int id;

    public ThreadTask(int id) {
        this.id = id;
    }

    public synchronized void run() {
        BufferedReader br = null;

        try {
            String sCurrentLine;

            br = new BufferedReader(new FileReader("C:\\testing\\test1.txt"));

            while ((sCurrentLine = br.readLine()) != null) {
                String[] s = sCurrentLine.split("\\s+");
                for (String split : s) {
                if(split.matches("\\d*"))
                System.out.println(split);
            }
        }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)br.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

    }
}
4

1 回答 1

0

我不确定我可以有什么逻辑,以便通过使用该多线程程序,我可以指定这么多百分比的随机调用转到第一行、第二行或第三行。任何帮助将不胜感激。

因为,这似乎是家庭作业(或自学),我建议您考虑一下如果您假装自己是计算机,您将如何做到这一点。一部分是阅读Random该类的 javadoc,并找出如何映射随机int值以适应您的百分比范围。


作为一个脚注,我对您通过使其成为多线程程序来实现的目标感到困惑。也许你可以解释一下。在我看来,它(目前)只是让一个简单的任务变得更复杂......没有性能优势。

于 2012-04-22T01:00:01.930 回答