关于多核和java似乎有很多大惊小怪.虽然有些人说java支持不够好,但它似乎肯定是一个值得期待的领域.似乎有许多 技术可以提高并发程序的性能.
有关在多核方案中编程的任何提示/建议都表示赞赏.
查看已在Java 5中添加的新Java并发工具(在java.util.concurrent
包中).它提供了比常规更高级的功能,Thread
这将使编写并发应用程序变得更容易(并且更不容易出错).该课:并发的Java教程将是一个良好的开端.
到目前为止,我只使用了ExecutorService
允许生成线程池的线程池,新的任务可以以Runnable
s或Callable
s 为单位进行切换(可以在执行后返回值为Future
s),实际的线程代码由这个ExecutorService
.
例如,使用2个线程的线程池执行一些计算,并获得结果可以很简单:
ExecutorService es = Executors.newFixedThreadPool(2); Future f1 = es.submit(new Callable() { public Integer call() { // Do some processing... return someInteger; } }); Future f2 = es.submit(new Callable () { public Integer call() { // Do some processing... return someInteger; } }); Integer firstInteger = f1.get(); Integer secondInteger = f2.get();
在以上(未经测试)的代码,我所担心的是做了几个Callable
S和submit
其荷兰国际集团的ExecutorService
,后来,用Future
s到检索结果.
捕获是,一旦调用了get
方法Future
,如果处理未完成,程序将停止,直到Future
可以检索结果.因此,在此示例中,即使f2
之前的结果可用f1
,程序也会等到结果f1
可用.
在阅读材料方面,我很快就要购买的书籍清单是Brian Goetz的Java Concurrency in Practice,它经常出现在Java的并发性中.
Java 5文档中的Concurrency Utilities页面也提供了更多信息.
最好的提示必须是:让您的同步正确!
这似乎有些明显,但的理解Java内存模型是至关重要的,特别是如何挥发和最终下地干活,怎么同步的同时充当一个互斥体和一个内存屏障,然后将新的java.util.concurrent
结构,以及
总是一个很好的提示 - 如果你的大多数类都是不可变的,那么一切都变得如此简单,因为不变性使人们无需担心从很多地方到很少的地方.