SORU
24 EKİM 2010, Pazar


&; Paralel".&Quot; Java için?

Eğer Parallel.For bir eşdeğer olup olmadığını merak ediyordum .Java için net sürümü?

Orada birisi bir örnek arz misiniz? teşekkürler!

CEVAP
24 EKİM 2010, Pazar


Yakın bir şey olurdu sanırım

ExecutorService exec = Executors.newFixedThreadPool(SOME_NUM_OF_THREADS);
try {
    for (final Object o : list) {
        exec.submit(new Runnable() {
            @Override
            public void run() {
                // do stuff with o.
            }
        });
    }
} finally {
    exec.shutdown();
}

TheLQ yorumlarına dayanarak Runtime.getRuntime().availableProcessors(); SUM_NUM_THREADS ayarlayın

Edit: bir temel "Paralel.eklemeye Karar verdi"Uygulama

public class Parallel {
    private static final int NUM_CORES = Runtime.getRuntime().availableProcessors();

    private static final ExecutorService forPool = Executors.newFixedThreadPool(NUM_CORES * 2, new NamedThreadFactory("Parallel.For"));

    public static <T> void For(final Iterable<T> elements, final Operation<T> operation) {
        try {
            // invokeAll blocks for us until all submitted tasks in the call complete
            forPool.invokeAll(createCallables(elements, operation));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static <T> Collection<Callable<Void>> createCallables(final Iterable<T> elements, final Operation<T> operation) {
        List<Callable<Void>> callables = new LinkedList<Callable<Void>>();
        for (final T elem : elements) {
            callables.add(new Callable<Void>() {
                @Override
                public Void call() {
                    operation.perform(elem);
                    return null;
                }
            });
        }

        return callables;
    }

    public static interface Operation<T> {
        public void perform(T pParameter);
    }
}

Paralel örnek Kullanım.İçin

// Collection of items to process in parallel
Collection<Integer> elems = new LinkedList<Integer>();
for (int i = 0; i < 40;   i) {
    elems.add(i);
}
Parallel.For(elems, 
 // The operation to perform with each item
 new Parallel.Operation<Integer>() {
    public void perform(Integer param) {
        System.out.println(param);
    };
});

Bu uygulama gerçekten Parallel.ForEach daha benzer sanırım

Edit Eğer ilgilenen olursa bu kadar GitHub üzerine koydum. Parallel For on GitHub

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LardTardProductions's channel

    LardTardProd

    10 NİSAN 2009
  • Michael Neal

    Michael Neal

    2 Mayıs 2009
  • Vintendo Power

    Vintendo Pow

    2 Ocak 2007