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-учебник