David.Ko

          Follow my heart!
          posts - 100, comments - 11, trackbacks - 0, articles - 0
             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          java多線程調試

          Posted on 2007-05-23 10:32 David.Ko 閱讀(1493) 評論(0)  編輯  收藏 所屬分類: debug

          public void addElement( Patient newPatient )

          {

          synchronized ( lock )

          {

          Log query = incomingPatient.getLog();

          results = query.getAllSearchResults();

          for ( int k = 0; k < results.length; k++)

          {

          .... // add to table

          setMaxColSize(MyTable);

          tableContents.add(MyTable);

          }

          }

          }

          避免多線程錯誤

          有一些方法可以避免可怕的線程錯誤:

          如果依靠線程優先級來使線程保持同步,那么測試 JVM 的各種類就顯得非常重要。小心可能發生兩個線程同時賦值給 long 和 double 變量。其討厭的結果是一個線程的更改可能更改某個變量,而第二個線程可能再次改變同一個變量。請考慮對那些變量類型進行同步賦值。

          永不使用 stop() 方法。實際上,Java 2 中反對該方法。它會立即停止進程,但又不進行整理,這會導致許多問題,包括死鎖和內存鎖定。 應始終通過從 run() 方法返回來終止線程。

          不要重新啟動已停止的線程。run() 方法沒有被調用,而 isAlive() 方法報告錯誤,指出實際上線程已死。

          不要獨占 CPU。如果程序的一部分獨占了 CPU,就應該運行 yield() 方法,此方法可以讓其它線程也有機會運行。請參閱這個小示例:

          double answer = 0;

          for (int i=0; i<10000; i++) {

          for (int j = 0; i<10000; j++) {

          answer = ((answer * i) + j) / j;

          }

          Thread.yield(); // Now other threads may run while this

          //runs in the background

          }



          只有注冊用戶登錄后才能發表評論。


          網站導航:
          相關文章:
           
          主站蜘蛛池模板: 和田市| 同心县| 安仁县| 阿城市| 连南| 繁昌县| 安图县| 淮滨县| 岳阳市| 鲁山县| 苏州市| 尼木县| 澄迈县| 赤壁市| 惠来县| 开鲁县| 奇台县| 宁国市| 宽甸| 无为县| 彝良县| 景谷| 云霄县| 琼结县| 闻喜县| 铁岭县| 习水县| 翼城县| 扎赉特旗| 乐平市| 渝中区| 永寿县| 花莲市| 高台县| 连山| 乐至县| 西峡县| 五常市| 财经| 琼海市| 井冈山市|