////////////////////////////////////////////////////////////////////////////////
//  << j561.java >>
//
//  スレッド(6):デッドロック
//
//  2つのスレッドが互いに相手のロックの解放を待ち、先に進めない状態をいう。
//
//  例えば、2つのスレッドを想定する。
//  スレッド1は、オブジェクトa、オブジェクトbの順にロックをかけ、
//  2つを確保した時点で、変数countを1増加する計算を実行する。
//    スレッド2は、オブジェクトb、オブジェクトaの順に確保していき、2つを
//  確保した時点で、変数countを1加算する計算を実行する。
//   
//    スレッド1が、まずオブジェクトaを確保し、次にオブジェクトbを確保しよう
//  とするとき、スレッド2がオブジェクトbをすでに確保していたら、スレッド1は
//  オブジェクトbを確保できない。またスレッド2もオブジェクトaを確保できない。
//  この結果、スレッド1もスレッド2も停止してしまう。
//  このような状態はデッドロックである。
//
//  防止するするには、2つのオブジェクトが同じ順にオブジェクトをロックする
//  ようにすればよい。
//
////////////////////////////////////////////////////////////////////////////////