标签 ‘ concurrency

聊聊我对Java内存模型的理解

所有的编程语言中都有内存模型这个概念,区别于微架构的内存模型,高级语言的内存模型包括了编译器和微架构两部分。我试图了解了Java、C#和Go语言的内存模型,发现内容基本大同小异,只是这些语言在具体实现的时候略有不同。

我们来看看Java内存模型吧,提到Java内存模型大家对这个图一定非常熟悉: 阅读全文

任务取消(Cancellation)

原文链接:http://gee.cs.oswego.edu/dl/cpj/cancel.html

作者:Doug Lea 译者:丁一

当某个线程中的活动执行失败或想改变运行意图,也许就有必要或想要在其它线程中取消这个线程的活动,而不管这个线程正在做什么。取消会给运行中的线程带来一些无法预料的失败情况。取消操作异步特性相关的设计技巧,让人想起了因系统崩溃和连接断开任何时候都有可能失败的分布式系统的那些技巧。并发程序还要确保多线程共享的对象的状态一致性。

在大多数多线程程序中,取消任务(Cancellation)是普遍存在的,常见于:

  • 几乎所有与GUI中取消按钮相关的活动。
  • 多媒体演示(如动画循环)中的正常终止活动。
  • 线程中生成的结果不再需要。例如使用多个线程搜索数据库,只要某个线程返回了结果,其它的都可以取消掉。
  • 由于一组活动中的一或多个遇到意外错误或异常导致整组活动无法继续。

脚注:在并发编程中两个l的cancellation最常见。译者注:英语”取消”有两种写法cancelation和cancellation

阅读全文

return top