In SWT, only the UI
thread (the one that created the Display object) can update any UI elements. You can spawn worker threads that chug away, and remain blissfully ignorant of SWT threading rules--as long as you don't have to update the UI.
To update the UI, you use Display.asyncExec() or Display.syncExec(). These methods actually block UI updates, so in practice you spawn a worker thread, do some work, call one of these methods to update the UI, and return to your work.
SWT has some widgets, covered in the book, that take some of the pain out of using asyncExec() and syncExec(). ProgressBar, which displays a standard progress bar control, is the rawest of these: you update it directly (see page 130). BusyIndicator (p. 280) shows a busy cursor while it runs some long-running operation. Finally, ProgressMonitorDialog (p. 626), part of JFace, displays a dialog with a progress bar.
In each case, remember the paradigm: do a bit of work, update the interface to reflect progress, and do a bit more work.