Java 多线程能否执行单个任务,以便快速完成任务?在爪哇

Java 多线程能否执行单个任务,以便快速完成任务?在爪哇,java,multithreading,Java,Multithreading,我有一个任务,完成它需要很多秒。所以我想知道在Java中是否使用多线程概念,我是否可以使用多线程来执行单个任务,以便快速完成任务。 这是我的例子 螺纹类 public class ThreadImpl implements Runnable { @Override public void run() { String value="a"; for(int i=0;i<2147483646;i++) {

我有一个任务,完成它需要很多秒。所以我想知道在Java中是否使用多线程概念,我是否可以使用多线程来执行单个任务,以便快速完成任务。 这是我的例子

螺纹类

public class ThreadImpl implements Runnable {
    @Override
    public void run() {
        String value="a";
        for(int i=0;i<2147483646;i++) {
            value=value+"b";
        }
        System.out.println("thread task completed "+value);
    }
}
我想了解是否真的可以创建多个线程并同时执行该任务
public void run()
?如果可以,如何做到这一点

我可以使用多线程来执行单个任务吗

这取决于你所说的“任务”是什么意思。你的例子展示了一个函数,当它被线程调用时,它执行一次计算。(注意:这不是一个非常有趣的计算,但它仍然是一个计算。)如果同一个函数被多个线程调用,那么将发生的是,每个线程将执行相同的计算,因为这是编写函数的唯一目的。不会节省任何时间

为了让多个线程在解决某些问题时进行协作,您必须编写指示它们协作的代码。您必须编写一个或多个可以执行部分计算的函数;您必须编写代码,将不同的部分分配给不同的线程;您可能需要编写代码,将部分结果合并为单个最终结果。Java中没有神奇的东西可以自动重新编写单线程代码来为您完成这些事情。你必须自己写

我可以使用多线程来执行单个任务吗

这取决于你所说的“任务”是什么意思。你的例子展示了一个函数,当它被线程调用时,它执行一次计算。(注意:这不是一个非常有趣的计算,但它仍然是一个计算。)如果同一个函数被多个线程调用,那么将发生的是,每个线程将执行相同的计算,因为这是编写函数的唯一目的。不会节省任何时间


为了让多个线程在解决某些问题时进行协作,您必须编写指示它们协作的代码。您必须编写一个或多个可以执行部分计算的函数;您必须编写代码,将不同的部分分配给不同的线程;您可能需要编写代码,将部分结果合并为单个最终结果。Java中没有神奇的东西可以自动重新编写单线程代码来为您完成这些事情。您必须自己编写。

使用并行流的示例代码段

final String[] value = {"a"};
    Stream.iterate(1,x -> x+1 )
            .limit(10)
            .parallel()
            .forEach(y -> value[0] = value[0] + "b"  );

您可以将限制值更改为所需的数字。在使用parallel的机器上,当限制为100000时,我看到使用parallel的性能提高了5倍。

使用并行流的示例片段

final String[] value = {"a"};
    Stream.iterate(1,x -> x+1 )
            .limit(10)
            .parallel()
            .forEach(y -> value[0] = value[0] + "b"  );

您可以将限制值更改为所需的数字。在我的并行机上,当极限为100000时,我看到并行机的性能提高了5倍。

什么是“单独同时”的意思?参数的“a”在哪里?这是一个非常复杂的问题。任务是否进行输入/输出?任务是否只执行不需要访问外部资源的计算?任务中的每个步骤是否取决于以前的结果?您的示例除了最后一次之外没有I/O,因此您可以运行与硬件核心数量相同的实例。8个内核将提供8倍的加速。如果任务执行大量I/O或具有顺序依赖性,则可能不会获得很大的加速。这个问题没有单一的答案,我的意思是,多个线程同时执行这个任务@tgdavies@JimGarrison没有I/O。我只需要在多个线程一起单独执行该任务,以减少执行时间。什么是“同时单独”呢平均值?参数的“a”在哪里?这是一个非常复杂的问题。任务是否进行输入/输出?任务是否只执行不需要访问外部资源的计算?任务中的每个步骤是否取决于以前的结果?您的示例除了最后一次之外没有I/O,因此您可以运行与硬件核心数量相同的实例。8个内核将提供8倍的加速。如果任务执行大量I/O或具有顺序依赖性,则可能不会获得很大的加速。这个问题没有单一的答案我是说,多个线程同时执行以执行该任务@tgdavies@JimGarrison没有I/O。我只需要单独执行多个线程的任务,以减少Exchange时间。如果这个答案解决了你的问题,请把它标记为答案,或者考虑投票,如果这个答案解决了你的问题,请标记。作为回答或考虑投票