gpt4 book ai didi

java - Android Java 在单独的线程中运行类似于 C# 风格的 Action 列表

转载 作者:太空宇宙 更新时间:2023-11-04 11:47:13 25 4
gpt4 key购买 nike

我是 .NET 开发人员,但我必须用 Java 为 Android 编写一些代码。我需要运行 4 个计算操作,并且我想在单独的线程中进行。我可以简单地创建 4 个线程并运行它,但是当设备的核心数少于 4 个时(例如 1 个),它的效率将与仅在一个线程中运行相同甚至更低。在 C# 中,我可以创建 Action 列表,然后在 Parrarel 中运行它,如下所示:

C# 代码:

var actions = new List<Action>
{
() => { // some action1},
() => { // some action2},
() => { // some action3},
() => { // some action4},
}
Parallel.ForEach(actions, new ParallelOptions { MaxDegreeOfParallelism = GetCoreCount() }, x => x());

这将运行,这将保证每个操作将在单独的核心上处理(更多-更少)

我可以在 Android 上用 Java 做这样的事情吗?

我不知道如何开始。

我脑子里只有一件事是这样的,但这很丑陋而且无效。

int cores = Runtime.getRuntime().availableProcessors();
if(cores = 1)
{
// Create 1 Thread with action1,action2,action3,action4
}
if(cores = 2)
{
// Create 1 Thread with action1,action2
// And Create 2nd Thread with action3,action4
}
if(cores = 3)
{
// Create 1 Thread with action1,
// And Create 2nd Thread with action2
// And Create 3rd Thread with action3
// Thread that first end his action will pick up Action4
}
if(cores >= 4)
{
// Create 1 Thread with action1,
// And Create 2nd Thread with action2
// And Create 3nd Thread with action3
// And Create 4th Thread with action4
}

即使没有编码,这看起来也非常不清楚和肮脏(当我添加第 5 个 Action 时会怎样?或者将有 8 个 Action 和 8 个核心?)

我可以做一些类似于 C# 的事情吗?操作列表和并行执行受核心数量限制?

感谢您的建议:)

最佳答案

尝试使用 threadPoolExecutor https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html

Java 可以解决您担心的效率问题,仅供引用,一台具有一个核心/CPU 的计算机将运行多个线程,但在任何给定时间都只会有一个线程在运行。但是任何现代计算机都有大量线程同时运行,它并不取决于有多少个核心/CPU 存在/可用。

关于java - Android Java 在单独的线程中运行类似于 C# 风格的 Action 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42234621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com