Avoiding Interference
Allowing multiple threads to access the same data structures is always a potentially dangerous situation. To avoid unexpected effects some mutual exclusion strategy is required.
In fact (we will see later) Java provides synchronized methods to support this kind of mutual exclusion.
Unfortunately synchronized methods come with some overhead, and Swing components generally do not use synchronized methods.
Instead there is an assumption that essentially all operations on GUI components should occur in the event dispatching thread.