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,我的线程有一些问题。我知道它们是如何工作的,但是由于它们都使用相同的方法,我如何运行不同的线程来完成完全不同的事情,但同时执行 在我看来,他们似乎总是使用相同的标准方法,这使他们做同样的事情 所以,假设我有一个大的.txt文件,我想遍历每一行并对这一行做些什么。在本例中,我希望每个线程都执行.txt文件的1/10,但我不理解线程如何相互通信,以及它们如何组织,以便每个线程都执行正确的部分 有人能解释一下或者帮我解决这个问题吗?非常感谢 您可以扩展java.lang.Thread(或者更好的-实现

我的线程有一些问题。我知道它们是如何工作的,但是由于它们都使用相同的方法,我如何运行不同的线程来完成完全不同的事情,但同时执行

在我看来,他们似乎总是使用相同的标准方法,这使他们做同样的事情

所以,假设我有一个大的.txt文件,我想遍历每一行并对这一行做些什么。在本例中,我希望每个线程都执行.txt文件的1/10,但我不理解线程如何相互通信,以及它们如何组织,以便每个线程都执行正确的部分


有人能解释一下或者帮我解决这个问题吗?非常感谢

您可以扩展
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();

据我所知,线程是并行运行的独立部分,总有一个主线程(通常是主线程)控制并行运行的工作线程。线程之间不需要相互通信,因为该任务由主线程负责


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

现在,您可能应该查看而不是修补原始线程(当然,在适当的情况下也可以使用)线程是一个相当大的主题,但是通过使用“代码< >并发”包中定义好的习惯用法,它可能变得更容易忍受。

这是一个大问题。也许你应该考虑做一些代码来刺探它,并且在这个问题中包括这个问题,你也必须考虑用Mult访问它是否有意义。并行执行iple线程。如果它们对每行所做的工作非常小,则读取文件的I/O成本相对较大,多线程将无济于事。如果您执行更大的操作(例如从该行的URL下载文件),这可能是个好主意。波佐,这对我帮助很大。非常感谢。我会去尝试一下,稍后会回来反馈。如果其他人有什么需要注意的,请注意。再次感谢!@CrisCarter我看起来你不知道,但如果有任何答案对你有很大帮助(比如这一个),和/或通过在您想要接受的答案上的上下投票箭头下方按勾号来实际回答您应该接受的原始问题。这样您将保持您的声誉,其他人将更倾向于帮助您!