Java параллельное выполнение на многоядерных

Я хотел бы знать, существует ли способ распараллеливания запросов в Java (или есть фреймворк или библиотека), как в C# и Linq:

var query = from item in source.AsParallel().WithDegreeOfParallelism(2)
        where Compute(item) > 42
        select item;

и если я не могу распараллелить запросы, если я могу сделать что-то подобное в C# (a для каждого распараллеленного):

  Parallel.ForEach(files, currentFile =>
        {
            // The more computational work you do here, the greater  
            // the speedup compared to a sequential foreach loop. 
            string filename = System.IO.Path.GetFileName(currentFile);
            System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(currentFile);

            bitmap.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
            bitmap.Save(System.IO.Path.Combine(newDir, filename));

            // Peek behind the scenes to see how work is parallelized. 
            // But be aware: Thread contention for the Console slows down parallel loops!!!
            Console.WriteLine("Processing {0} on thread {1}", filename,
                                Thread.CurrentThread.ManagedThreadId);

        } 

пожалуйста, если вы разместите какие-либо фреймворки или библиотеки, расскажите, пожалуйста, какой у вас был опыт? спасибо за ваше время.

о C# и linq вы можете найти здесь в документации: http://msdn.microsoft.com/en-us/library/dd997425.aspx

2 ответа

Решение

Прямого перевода нет. Во-первых, Java не имеет LINQ и не имеет никаких стандартных классов параллельной коллекции.

GPars, возможно, ближе всего подходит.

Обратите внимание, что, хотя он нацелен на Groovy, его API отлично используется из Java

Может быть, Fork/Join Framework может вам помочь? Вот Java-учебник

Другие вопросы по тегам