在Java中同时并行处理两个任务

在Java中同时并行处理两个任务,java,parallel-processing,Java,Parallel Processing,我想在一个方法中调用8个方法 这8种方法中的2种方法是一个孔任务,其余6种方法是另一个孔任务 我想同时并行处理这两个任务 据我所知,我可以用线来做。但老实说,要么我看不到一个与我的目标类似的例子,要么我看不懂这个例子 你能简单地给我举个例子让我完成我的目标吗 谢谢,这可以通过多种方式完成,例如使用共享: 在主代码中,使用共享的信号灯进行同步: Semaphore s = new Semaphore(0); new Thread(new Task(s, "Task A")).start(); ne

我想在一个方法中调用8个方法

这8种方法中的2种方法是一个孔任务,其余6种方法是另一个孔任务

我想同时并行处理这两个任务

据我所知,我可以用线来做。但老实说,要么我看不到一个与我的目标类似的例子,要么我看不懂这个例子

你能简单地给我举个例子让我完成我的目标吗


谢谢,

这可以通过多种方式完成,例如使用共享:

在主代码中,使用共享的
信号灯
进行同步:

Semaphore s = new Semaphore(0);
new Thread(new Task(s, "Task A")).start();
new Thread(new Task(s, "Task B")).start();
Thread.sleep(1000);
s.release(2);                  // release 2 permits to allow both threads continue
输出:

Task A waiting
Task B waiting
Task A continuing              // after 1 second
Task B continuing

像这样的事情也许:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class Main {
    public static void main(final String[] args) throws InterruptedException {
        final ExecutorService pool = Executors.newFixedThreadPool(2);

        pool.execute(() -> {
            method1();
            method2();
        });

        pool.execute(() -> {
            method3();
            /* ... */
            method8();
        });

        pool.shutdown();

        if (!pool.awaitTermination(1, TimeUnit.DAYS))
            System.err.println("Pool did not terminate.");
    }
}

不太可能,因为你表达的方式太抽象,无法给你任何具体的帮助。你需要更具体一些。我的建议是,与其在互联网上寻找现成的例子,不如深入了解,关于这个主题的书有很多,从做小练习开始,然后当你真正理解了,你一定能够解决你的实际任务。看看吧……萨沙,那么,在不同的两项任务中,我将把我的不同方法称为什么呢?@yusuf哦,我看了另一个答案,我想我误解了你的问题。sorry@yusuf我认为您首先需要在每个线程中调用2个方法,然后在某个时刻继续同步。对不起,您是什么意思@Sasha?:)根据java文档:execute-->在将来的某个时间执行给定的命令。这并不总是能保证两项任务同时执行。@AmitParashar:我不认为优素福是这个意思。您永远无法确保两个任务完全同时启动(例如,Sasha的代码无法确保)。如果任务之间存在某种数据依赖关系,则需要额外的同步,但正如其他评论者所说,我们需要有关问题的额外信息。同意Yusuf的要求。但是,我希望有一种方法可以将任务(独立且互斥)委托给两个不同的核心。也许,这种方式可以实现“与操作系统计算的时间完全相同”(接近最小单位)的执行。这需要某种非标准操作系统(或至少是经过修改的标准操作系统),您可以完全控制调度程序(或至少对此提供特殊支持),我想。你会从这样一个功能中得到什么?@cic:我不打算否决你的回答。我的想法是,如果有可能实现这样一个功能,你可以达到多处理器系统提供的精确度。:-)
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class Main {
    public static void main(final String[] args) throws InterruptedException {
        final ExecutorService pool = Executors.newFixedThreadPool(2);

        pool.execute(() -> {
            method1();
            method2();
        });

        pool.execute(() -> {
            method3();
            /* ... */
            method8();
        });

        pool.shutdown();

        if (!pool.awaitTermination(1, TimeUnit.DAYS))
            System.err.println("Pool did not terminate.");
    }
}