Re: a tight game loop in Swing
On 6/6/12 11:58 PM, Lew wrote:
Knute Johnson wrote:
Lew wrote:
John B. Matthews wrote:
This reminds of an example adduced by Knute Johnson:
<https://groups.google.com/d/msg/comp.lang.java.gui/aBy_DZFvg2M/-T9aWOwBM-QJ>
Ten points for using the word "adduced".
There are some EDT violations in the cited code's 'main()' routine.
Here's the updated code with that fixed.
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.lang.reflect.*;
import javax.swing.*;
public class test3 extends JPanel implements Runnable {
volatile BufferedImage bi;
volatile long then;
I am curious what motivated the choice of 'volatile'.
In my own case I will sometimes speculatively use 'volatile' to mark
fields not essential to state despite that the class does not implement
'Serializable'. While this violates the rigid rule prohibiting
superfluity, I aver that the marker aids reasoning about the state in
such cases.
This doesn't seem to be that.
Volatile has nothing to do with Serializable. Perhaps you're having a
moment of confusing volatile with transient? Volatile is necessary when
you want to force a happens-before relationship to reads/writes to a
field. It also guarantees the you won't have a situation where writes
aren't flushed to main memory before the next attempted read.
In other words, it is one safe way to publish a value across threads.