在多核场景中编写 Java 程序的提示 [已关闭]

2022-09-03 03:42:06

关于多核和java似乎有很多大惊小怪。虽然有人说Java支持还不够好,但它绝对是一个值得期待的领域。似乎有许多技术可以提高并发程序的性能。

任何有关在多核场景中编程的提示/建议都值得赞赏。


答案 1

查看 Java 5 中添加的新 Java 并发工具(在 java.util.concurrent中)。它提供了比常规 s 更高级的功能,这将使编写并发应用程序更容易(并且不容易出错)。教训:Java教程并发性将是一个很好的起点。Thread

到目前为止,我只使用了 ExecutorService,它允许生成线程池,新任务可以以 Runnables 或 Callables 为单位传递到这些线程池(可以在执行后返回值作为 Futures),并且实际的线程代码由 .ExecutorService

例如,使用包含 2 个线程的线程池执行一些计算,并获取结果可以很简单:

ExecutorService es = Executors.newFixedThreadPool(2);

Future f1 = es.submit(new Callable<Integer>() {
    public Integer call()
    {
        // Do some processing...
        return someInteger;
    }
});

Future f2 = es.submit(new Callable<Integer>() {
    public Integer call()
    {
        // Do some processing...
        return someInteger;
    }
});

Integer firstInteger = f1.get();
Integer secondInteger = f2.get();

在上面(未经测试的)代码中,我所要担心的就是制作几个s并将其提交给和稍后,使用s来检索结果。CallableExecutorServiceFuture

问题是,一旦调用了 get 方法,如果处理未完成,程序将停止,直到可以检索到的结果。所以,在这个例子中,即使的结果在之前是可用的,程序也会等到的结果可用。FutureFuturef2f1f1

在阅读材料方面,我即将购买的书籍列表中是Brian Goetz的Java Concurrency in Practice,当Java中的并发性被提出时,它经常出现。

Java 5 文档中的“并发实用程序”页面也包含更多信息。


答案 2

最好的提示必须是:正确进行同步!

这似乎有些明显,但了解Java内存模型至关重要,特别是易失性和最终字段的工作原理,同步如何同时充当互斥体内存屏障,然后新构造也是如此。java.util.concurrent


推荐