let's play TDD, tackles closures in java

Tom Hawtin tom.hawtin at oracle.com
Mon Dec 20 05:01:54 PST 2010


On 20/12/2010 10:49, Brian Goetz wrote:

> So, in what thread is the closure going to get executed?  Listeners are generally fired in the EDT (in correctly written programs).  Which means that this code example has a data race, and is therefore broken.

A bit off topic, but: Are you sure? Isn't "generally" a problem?

I am not entirely sure what a correctly written Swing program would look 
like.

"Notification is done on the thread that produced the mutation [...]" in 
AbstractDocument doesn't sound like the EDT.

Swing text attempts to be thread-safe but is all over the place. How do 
you do something as complicated as appending text through the Document 
interface? Swing text is thread-hostile.

Testing a known thread-agnostic use of TableModel is sensible. (Top tip: 
Put a layer of indirection between the body of your code and code that 
uses mutable statics, such as 
java.awt.EventQueue.invokeLater/isDispatchThread.)

Tom


More information about the lambda-dev mailing list