Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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 同时启动一个线程5次?_Java_Multithreading_Executorservice - Fatal编程技术网

Java 同时启动一个线程5次?

Java 同时启动一个线程5次?,java,multithreading,executorservice,Java,Multithreading,Executorservice,我想同时执行一个cmd命令五次。因此,我创建了一个线程,该线程发出命令,并启动该线程五次。这是正确的吗 MyRunnable r1 = new MyRunnable(); ExecutorService executor = Executors.newFixedThreadPool(5); for (int i = 0; i < 5; i++) { executor.execute(r1); } 我不太明白,你的问

我想同时执行一个cmd命令五次。因此,我创建了一个线程,该线程发出命令,并启动该线程五次。这是正确的吗

MyRunnable r1 = new MyRunnable();
        ExecutorService executor = Executors.newFixedThreadPool(5);

        for (int i = 0; i < 5; i++) {
            executor.execute(r1);
        }

我不太明白,你的问题中的“正确”是什么意思

如果您询问,此代码是否有效?那么答案是肯定的

这段代码可能会导致一些问题吗?那么答案也是肯定的

如果您的可运行对象有一些公共状态(一些类级字段),它们可能会被破坏,因为多个线程将能够修改它


如果您的runnable是无状态的,并且它的所有变量都在一个方法范围内声明,那么一切都可能正常,直到有一天有人会添加一个类级变量。。。并且可能会出现非常奇怪的应用程序行为,甚至更糟的是,一些生产错误,很难发现和调试。为了防止这种行为,您必须为启动的每个线程创建一个新的可运行类实例。

而不是使用MyRunnable r1=new MyRunnable(); 使用Runnable r1=new MyRunnable()

要执行线程,可以使用execute()方法或submit()。 我觉得你的代码不错

确保ExecutorService已关闭。要关闭ExecutorService,可以使用shutdown()\shutdownNow()。
另外,可以使用waittermination()来等待所有线程终止。

您的问题是什么?我相信不是。执行时间本身需要时间。如果我没有错,那么启动一个普通线程需要2秒钟。那么,执行线程n次的正确方法是什么?@真的有效吗?@Kayaman相反:我没有文档证明它可以保证。它只是保证它将为我执行代码,但不保证执行的方式、顺序等。如果任务非常快,它们可能会在一个线程中结束。
@Override
    public void run()
    {
        try {
            // Execute command
            String command = "cmd /c start cmd.exe";
            Process child = Runtime.getRuntime().exec(command);

            // Get output stream to write from it
            OutputStream out = child.getOutputStream();

            out.write("cd C:/ /r/n".getBytes());
            out.flush();
            out.write("dir /r/n".getBytes());
            out.close();
        } catch (IOException e) 
        {

        }
    }