実際の実行結果では21と表示されています。実行結果は毎回変わります。(実行環境によってかなり変わります。複数のスレッドがどういう順番でどれだけ実行されるかが決まっていないからです。以下の図2に示すような実行順序や図3に示すような実行順序が考えられます。(処理の一時休止)を挟んでいます。言うように1つの処理にまとめてもこの問題は解決されません。この3つの命令の間でスレッドの切り替わりが起きる可能性もあります。デバッグする上では最も困難な現象が起きます。デバッグしたくてもなかなかできるものではありません。operation)というものが必要になります。読み出し、加算、書き込みという3つの処理を行っている間、他のスレッドが同じ処理を行えないようにする必要があります。section)と呼びます。排他制御とは、複数のスレッドが同時に1つのデータの読み書きを行わないように制御することを言います。用いた排他制御について説明します。スレッドの排他制御を行うためには、同期オブジェクトと排他ロックという概念を用います。あるオブジェクトに鍵をかけます。鍵がはずされるまで待たされます。鍵をかけたスレッドはクリティカルセクションを終えた後にオブジェクトにかかっている鍵をはずします。鍵をかける操作のことを排他ロックと言います。鍵をはずす操作をロックの解放(またはアンロック(unlock))と呼びます。これらを用いることで排他ロック制御を行います。クラスでは、参照型の任意の変数を同期オブジェクトとして使用できます。