使用线程的Java UI渲染模型。 InputState

时间:2016-10-29 10:33:50

标签: java multithreading thread-safety rendering volatile

问题。

UI线程处理键/指针事件并将其写入名为InputState的类中。

渲染线程从InputState读取并连续更新其状态。

我看到3个解决方案

  1. synchronized的所有get / set方法中使用 InputState 关键字。但这意味着每次Render个线程检查事件的可能性(每个循环约50次),它必须获得一个锁。效率不高但允许UIThreadRender线程之间的精细多线程。

  2. 同步InputState单个引用。渲染线程在整个对象上进行同步,并在持有锁的同时按顺序获取50,然后释放锁。

  3. 拥有InputState的2个实例。假设1和2.渲染线程使用volatile关键字访问“live”(InputState1)。 InputState方法均未同步。 当UI线程处理新事件时,UI线程更新InputState,InputState2的卷影副本,然后一旦完成,就更新实时volalite引用。那个关键的操作是原子性的吗?现在渲染线程将InputState2视为“实时”。 InputState1现在是影子InputState。但! UI线程必须确保一些东西。 UIThread现在必须等待渲染线程在再次使用之前退出任何方法。因为Render线程可能太慢而无法在InputState1中的get方法中停留,而在一行中通过 UIThread 处理2个事件。不是吗? 我还不确定如何解决这个问题。因此我的问题在这里。 我可以使用第三个InputState而不是2并在检查渲染线程的易失性循环计数时旋转它们。

  4. 您认为哪种选择最佳?

0 个答案:

没有答案