同时启动多个线程

时间:2013-12-02 08:23:00

标签: java multithreading concurrency

我一直在尝试编写一些java应用程序。 这个应用程序想要运行的是处理文本文件。

但是,输入文本文件很大,(超过200mb) 我试图将200mb分成四个分割文件(每个50mb)

然后,使用四个线程,尝试同时处理每个分割。

所以,我创建了一个实现runnable的类,它有一个文本处理模块。 然后,我制作4个obj(名为worker1~workman4)runnnable类,然后调用:

worker1.run();
worker2.run();
worker3.run();
worker4.run();

但是,这些线程不是同时运行,而是线性运行。 这意味着,在完成worker 1线程之后,worker2线程正在运行。

所以,他们每个只需要0.5秒,但是通过这种线性运行,每次花费2秒。 (worker1为0.5s + worker2为0.5s + worker3为0.5s + worker4为0.5s) 如果我可以同时运行4个线程,我预计这个应用程序只需要0.5秒或不到1秒,这比2秒快。

我该怎么做?

4 个答案:

答案 0 :(得分:3)

你需要开始一个线程。所以:

new Thread(worker1).start();
new Thread(worker2).start();
new Thread(worker3).start();
new Thread(worker4).start();

答案 1 :(得分:1)

Runnable对象不是Thread,你需要使用Thread来运行Runnable Object,如下所示:

new Thread(worker1).start();

但我认为你可能会面临其他问题,所以请阅读java文档。

答案 2 :(得分:1)

读取一个磁盘上的文件通常不会受益于多线程。

尝试改进阅读和处理文件的方式。如果您还没有使用缓冲区,请使用BufferedReader

如果你从读取的内容中做了很多处理,那么考虑多线程处理,同时保持一个线程专用于读取。

要运行并发任务,您应该使用ExecutorService来实现Executors。花些时间阅读javadoc。

答案 3 :(得分:0)

worker1.run();

直接调用您的run方法。要启动一个线程(在新线程中调用run方法),请使用:

worker1.start();

(类似于worker2 / 3/4)

编辑:我认为工人是线程,而不是Runnables。 mvieghofer的回答是正确的。