Java 同时启动一个线程5次?
我想同时执行一个cmd命令五次。因此,我创建了一个线程,该线程发出命令,并启动该线程五次。这是正确的吗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); } 我不太明白,你的问
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)
{
}
}