As we mentioned in the introduction to this chapter, one of the reasons to use threads in your programs is to make your programs more responsive. When your program needs to do something time consuming, then you should fire up another worker thread instead of blocking the user interface.
However, you have to be careful what you do in a worker thread because, perhaps surprisingly, Swing is not thread safe. If you try to manipulate user interface elements from multiple threads, then your user interface can become corrupted.
To see the problem, run the test program in Example 1-10. When you click the Bad button, a new thread is started whose run method tortures a combo box, randomly adding and removing values.
public void run() ...