Jython Thread Safety如何应用于Java Swing?

时间:2015-03-13 20:10:52

标签: java swing jython

我想知道Jython的内存模型如何应用于创建Java Swing应用程序。

大多数GUI代码在事件派发线程上运行,以避免thread interferencememory inconsistency错误。

然而,Jython内存模型可以防止内存不一致错误,因为所有变量都是volatile。并且Jython中的原子操作减少了线程干扰。

这个Jython concurrency chapter说,“读取或替换单个实例属性”是一个原子操作。这是否也适用于Jython中使用的Java对象?

Jython的内存模型是否会改变Swing应用程序中并发处理的方式?

1 个答案:

答案 0 :(得分:0)

线程干扰在很小程度上可能会被Jython的内存模型属性降低,但线程干扰的大部分问题仍然存在。我的意思主要是数据结构的一致性。这会影响几乎所有包含不同数量项目的数据结构。例如,要附加到ArrayList,可能需要在引擎盖下进行一些操作:检查当前大小和分配的空间,(如果用完则可能分配更多空间),在结束时在下一个单元格处分配引用,并增加size变量。或者,在有缺口的缓冲区中,插入字符可能需要一些变量,指定间隙的位置,根据其先前的值进行修改,以及在必须移动间隙时要复制的大量引用。每个操作可能都是原子操作,但如果在此操作序列的中间切换线程,则从原始线程返回之前尝试读取或写入任何其他线程的角度来看,数据结构将显得已损坏完成数据结构修改操作。而Swing肯定会使用这些数据结构。

顺便说一句,这是关于原子性的一个好点。事实证明,引用赋值也是Java中的原子操作,但是从Java中读取longdouble时应该小心,因为writing these 64-bit primitives on 32-bit architectures is not necessarily atomic(即只有一半可能会被写入)。在Jython中,这不是问题,因为所有变量都是volatile