繁体   English   中英

如何在Java中运行不同的线程?

[英]How do I run different threads in Java?

我遇到线程问题。 我理解它们是如何工作的,但由于它们都使用相同的方法,我如何运行不同的线程来完成不同的事情,但同时呢?

对我来说,似乎他们总是使用相同的标准方法,这使得他们做同样的事情。

所以,假设我有一个很大的.txt文件,我想通过每一行并对该行做一些事情。 在这种情况下,我想让每个线程执行.txt文件的十分之一,但我不明白线程如何相互通信,以及它们如何组织,以便每个线程做正确的部分?

任何人都可以解释或帮助我吗? 非常感谢!

您可以扩展java.lang.Thread (或更好 - 实现java.lang.Runnable )并将参数传递给新对象的构造函数。 对于文本文件示例:

public FileReader implements Runnable {
    private int startLine;
    private int endLine;
    public FileReader(int startLine, int endLine) {
       // assign the params to the fields
    }

    public void run() {
       // use the params to read the appropriate lines
    }
}

然后你可以:

new Thread(new FileReader(1, 10)).start();
new Thread(new FileReader(11, 20)).start();
new Thread(new FileReader(21, 30)).start();

现在你可能应该看看java.util.Concurrent而不是修改原始线程(尽管它们当然可以在适当的地方使用)。 线程是一个很大的主题,但通过使用Concurrent包中明确定义的习语,它可以变得更加可忍受。

据我所知,线程是并行运行的独立部分,并且始终存在控制并行运行的工作线程的主线程(通常是主线程)。 由于主线程负责该任务,因此不需要线程彼此通信。

在您的情况下,您可以让主线程向工作线程发送参数,说明行号 - 对于thread1为0到10,对于thread2等为11到20.工作线程将这些数字作为输入并相应地处理文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM