Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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,是否可以使用返回两个线程的组合结果 低于执行?它可以通过未来的任务来完成,但是否可以 在下面的实现中执行。 我可以在另一个线程中访问一个线程的数据并对其求和以返回正确的结果吗 package concurrent.programming.multithreading; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CountDownLatch; import java.ut

是否可以使用返回两个线程的组合结果 低于执行?它可以通过未来的任务来完成,但是否可以 在下面的实现中执行。 我可以在另一个线程中访问一个线程的数据并对其求和以返回正确的结果吗

 package concurrent.programming.multithreading;

 import java.util.concurrent.BrokenBarrierException;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.CyclicBarrier;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;

 public class CopyOfAverageImplementation {


 public static double getAvg(int start,int end, int elements){
    double sum=0;
    for(int i= start;i<=end;i++){
        sum+=i;
     }
    return sum/elements;
 }


 public static void main(String[] args) {
    int list[] = new int[1000000];
    CountDownLatch latch =new CountDownLatch(100000);
    System.out.println("Adding elements to the list");
    for(int i=0 ;i<100000;i++){
        list[i]=i;
        System.out.print(" " + list[i]);
        latch.countDown();
    }
    try {
        latch.await();
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    System.out.println();
    System.out.println("Done Adding elements to the list");

    final CyclicBarrier barrier = new CyclicBarrier(2);

    ExecutorService pool = Executors.newFixedThreadPool(2);
    pool.execute(new Runnable() {
        double a;

        @Override
        public void run() {
            a= getAvg(0, 49999,100000);
            try {
                barrier.await();
            } catch (InterruptedException | BrokenBarrierException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(a);
        }
    });
    pool.execute(new Runnable() {
        double b;
        @Override
        public void run() {
            b= getAvg(50000, 100000,100000);
            try {
                barrier.await();
            } catch (InterruptedException | BrokenBarrierException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(b);;

        }
    });
    System.out.println("Done");
    pool.shutdown();


}
package concurrent.programming.multi-threading;
导入java.util.concurrent.BrokenBarrierException;
导入java.util.concurrent.CountDownLatch;
导入java.util.concurrent.CyclicBarrier;
导入java.util.concurrent.ExecutorService;
导入java.util.concurrent.Executors;
平均实现的公共类副本{
公共静态双getAvg(int开始、int结束、int元素){
双和=0;

对于(int i=start;i您可以将sum作为对象的成员,并让两个线程访问它并将其更新为共享值。为了确保更新正确,需要同步更新sum的方法。

您运行代码并告诉我们。