ami*_*mit 16 java concurrency performance multicore
关于多核和java似乎有很多大惊小怪.虽然有些人说java支持不够好,但它似乎肯定是一个值得期待的领域.似乎有许多 技术可以提高并发程序的性能.
有关在多核方案中编程的任何提示/建议都表示赞赏.
coo*_*ird 21
查看已在Java 5中添加的新Java并发工具(在java.util.concurrent包中).它提供了比常规更高级的功能,Thread这将使编写并发应用程序变得更容易(并且更不容易出错).该课:并发的Java教程将是一个良好的开端.
到目前为止,我只使用了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();
Run Code Online (Sandbox Code Playgroud)
在以上(未经测试)的代码,我所担心的是做了几个CallableS和submit其荷兰国际集团的ExecutorService,后来,用Futures到检索结果.
捕获是,一旦调用了get方法Future,如果处理未完成,程序将停止,直到Future可以检索结果.因此,在此示例中,即使f2之前的结果可用f1,程序也会等到结果f1可用.
在阅读材料方面,我很快就要购买的书籍清单是Brian Goetz的Java Concurrency in Practice,它经常出现在Java的并发性中.
Java 5文档中的Concurrency Utilities页面也提供了更多信息.