On further thought, if I were calling GLDrawable.display()() method to update the canvas (instead of GLCanvas.repaint(), then I would expect the thread synchronization problem would crop up again (is this correct?).
I understand the repaint() method is normally used during annimation loops. But in my application where I read blocks of data (from a pipe or a file) and then try and display it on the GLCanvas - I would like to be in control of when the canvas updates rather than letting the event loop decide.
So do you think display() would be my best approach rather than repaint()?
I find my head seems to be spinning this evening with thoughts of threads, event loops, pixel formats etc whilst trying to get a solid design for my program … and I’m only doing 2d stuff. I’ll get there in the end 
Txs
Sally