Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package przyklady03;
- import java.util.function.IntBinaryOperator;
- import java.util.concurrent.BrokenBarrierException;
- import java.util.concurrent.CyclicBarrier;
- public class SumyWierszamiSekwencyjnie {
- private static final int WIERSZE = 1000;
- private static final int KOLUMNY = 1000;
- private static final CyclicBarrier bariera;
- private static int[] sumy = new int[WIERSZE];
- static {
- bariera = new CyclicBarrier(WIERSZE, new Runnable() {
- @Override
- public void run() {
- for (int i = 0; i < WIERSZE; i++) {
- System.out.println(i + " " + sumy[i]);
- }
- }
- });
- }
- private static class Worker implements Runnable {
- private final int wiersz;
- private final int kolumny;
- private final IntBinaryOperator macierz;
- public Worker(int wiersz, int kolumny, IntBinaryOperator macierz) {
- this.wiersz = wiersz;
- this.kolumny = kolumny;
- this.macierz = macierz;
- }
- @Override
- public void run() {
- try {
- int suma = 0;
- for (int k = 0; k < kolumny; ++k) {
- suma += macierz.applyAsInt(wiersz, k);
- }
- sumy[wiersz] = suma;
- bariera.await();
- } catch (InterruptedException | BrokenBarrierException e) {
- System.out.println(wiersz + " przerwany");
- }
- }
- }
- private static void piszSumyWierszy(int wiersze, int kolumny, IntBinaryOperator macierz) {
- for (int w = 0; w < wiersze; ++w) {
- new Thread(new Worker(w, kolumny, macierz)).start();
- }
- }
- public static void main(String[] args) {
- piszSumyWierszy(WIERSZE, KOLUMNY, (wiersz, kolumna) -> {
- int a = 2 * kolumna + 1;
- return (wiersz + 1) * (a % 4 - 2) * a;
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement