ユーザーインターフェイススレッド
.NET Framework/.NET Core Windows Forms: System.Windows.Forms.Control.Invoke(), System.Windows.Forms.Control.BeginInvoke() WPF: System.Windows.Threading.Dispatcher.Invoke(), System.Windows.Threading.Dispatcher.BeginInvoke() WPF 4.5: System.Windows.Threading.Dispatcher.InvokeAsync()
Windowsランタイム/Windows UI Library: Windows.UI.Core.CoreDispatcher.RunAsync()
Android: Activity.runOnUiThread(Runnable), View.post(Runnable), View.postDelayed(Runnable, long)
.NETでは処理の委譲にデリゲートが使用されることが多い。
GUIアプリケーションにおいて、応答性を維持するためには、基本的にフレームの描画およびユーザー応答(さまざまなユーザー入力に対するアクション)はできるかぎり高いフレームレートで処理しないといけない。例えば60fps (frames per second) の場合、1フレームの処理を1/60秒=約16ミリ秒以内に完了する必要がある。しかし、たとえどれほどプロセッサの性能が向上したとしても、I/O処理や画像・動画のデコード、通信接続の確立など、完了までに長時間かかってしまう処理は必ず存在する。そういったものを含めて、すべての処理を1つのスレッドだけで実行すると、長時間かかる処理を実行している間はフレーム描画やユーザー応答の処理ができないため、UIの反応がなくなってしまう(ハングアップ、フリーズ)。長時間かかる処理の途中に、フレーム描画やユーザー応答に関わるメッセージ処理をときどき挟みながら、長時間かかる処理を少しずつ進める、という方法もあるが、スマートでないうえに適用限界がある。応答性の低下を防ぐためにマルチスレッド化が必要だが、それをどのようにしてソフトウェアの構造設計に持ち込むか、ということに関して、歴史的には1980年代から色々と議論があった。
例えば、JavaのAWTでは、1996年の最初の時点では、単純にスレッド間でデータ共有型のマルチスレッドになっていた。