CountDownLatch 應用

package com.hiberate.huijpa;

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;

public class Client {
    private int[] nums;

    public Client(int nums) {
        this.nums = new int[nums];
    }

    public int calc(String line, int index, CountDownLatch latch){
        String[] nus = line.split(",");
        int total=0;
        for (String num : nus) {
            total += Integer.parseInt(num);
        }
        System.out.println(Thread.currentThread()+" 結果:"+total);
        nums[index] = total;
        latch.countDown();
        return total;
    }

    public int sum(){
        int total=0;
        for (int num : nums) {
            total += num;
        }
        return total;
    }

    public static void main(String[] args) {
        List<String> content = getContent();
        Client client = new Client(content.size());

        CountDownLatch latch=new CountDownLatch(content.size());

        for (int i = 0; i < content.size(); i++) {
            final int j=i;
            new Thread(new Runnable() {
                @Override
                public void run() {
                    client.calc(content.get(j),j,latch);
                }
            }).start();
        }

        try {
            latch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        int sum = client.sum();
        System.out.println("總結果;"+sum);

    }

    private static List<String> getContent(){
        BufferedReader br =null;
        List<String> content=new ArrayList<>();
        try {
            br = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\work\\nums.txt")));
            String line=null;
            while ((line = br.readLine()) != null){
                content.add(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return content;
    }

   



}
相關文章
相關標籤/搜索