Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 来自多线程程序的随机调用的百分比_Java_Multithreading - Fatal编程技术网

Java 来自多线程程序的随机调用的百分比

Java 来自多线程程序的随机调用的百分比,java,multithreading,Java,Multithreading,下面是我的文本文件test1.txt AutoRefreshStoreCategories 70% 1 16 2060 10053 10106 10111 CrossPromoEditItemRule 20% 1 10107 10108 10109 CrossPromoManageRules 10% 1 10107 10108 10109

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

AutoRefreshStoreCategories  70%  1  16  2060    10053   10106   10111
CrossPromoEditItemRule      20%  1  10107   10108   10109
CrossPromoManageRules       10%  1  10107   10108   10109                                                                                                
我想写一个多线程程序,它可以逐行读取文件,并通过在空白处拆分来打印一行中的每个数字(我已经完成了这部分)。在上面的文件中,我在命令名旁边指定了一些百分比,例如在第一行中,它在autorefreshtorecategories旁边有70%。所以我希望70%的随机电话都打到第一行。同样的,第二线电话有20%,所以20%的随机呼叫转到第二线。最后,对于第三条线路,10%的随机呼叫转到第三条线路。 对于每一行,基本上我想打印每一行中的数字

AutoRefreshStoreCategories  70%  1  16  2060    10053   10106   10111
CrossPromoEditItemRule      20%  1  10107   10108   10109
CrossPromoManageRules       10%  1  10107   10108   10109                                                                                                
所以我在下面写了一个多线程程序,但该程序只打印每行的数字,它不考虑随机调用的百分比。我不确定我可以有什么逻辑,所以通过使用多线程程序,我可以指定第一行、第二行或第三行随机调用的百分比。 任何帮助都将不胜感激

AutoRefreshStoreCategories  70%  1  16  2060    10053   10106   10111
CrossPromoEditItemRule      20%  1  10107   10108   10109
CrossPromoManageRules       10%  1  10107   10108   10109                                                                                                
    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();
            }
        }

    }
}
公共类ExcelRead{
私有静态整数threadSize=4;
公共静态void main(字符串[]args){
对于(int i=1;i
我不确定我能有什么逻辑,所以通过使用多线程程序,我可以指定第一行、第二行或第三行随机调用的百分比。任何帮助都将不胜感激

AutoRefreshStoreCategories  70%  1  16  2060    10053   10106   10111
CrossPromoEditItemRule      20%  1  10107   10108   10109
CrossPromoManageRules       10%  1  10107   10108   10109                                                                                                
    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();
            }
        }

    }
}
因为,这似乎是家庭作业(或自学),我建议你想想如果你假装是计算机,你会怎么做。其中一部分是阅读
Random
类的javadoc,并找出如何映射一个随机
int
值以适应你的百分比范围

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


作为一个脚注,我对你试图通过使其成为一个多线程程序来实现的目标感到困惑。也许你可以解释一下。在我看来,(目前)这只是使一个简单的任务变得更复杂……而没有性能方面的好处。

这是家庭作业吗?或者更一般地说是一个“学习练习”?顺便说一句,调用run()不启动新线程。必须调用start()相反,我知道调用run不会启动一个新线程,我只是按顺序运行。那么实例化一个新线程有什么意义呢?我已将其更改为start。对此表示抱歉。事实上,我已经使这个问题足够简单,因为在此基础上,我必须执行一项复杂的任务。因此,我缩小了我的问题范围关于非常简单的情况,因为我需要根据线程大小进行随机调用的百分比。任何代码片段都将受到欢迎。
AutoRefreshStoreCategories  70%  1  16  2060    10053   10106   10111
CrossPromoEditItemRule      20%  1  10107   10108   10109
CrossPromoManageRules       10%  1  10107   10108   10109