If you syncExec your Runnable then you
will know that its execution has completed when the syncExec call has returned.
If you asyncExec your Runnable then
you will have to add a line to the end of your Runnable that notifies you
when it has been reached, implying that that your Runnable has been completed.