<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Vincent.Chan‘s Blog

    常用鏈接

    統計

    積分與排名

    網站

    最新評論

    多線程(6): Java Threads例子的一個問題

    看到《Java Threads》第5章,介紹了JDK 1.5新加的一些所謂原子類(Atomic Classes),總感覺有點為原子而原子,實際操作中,又有多少人會為了少許的性能提升而刻意去用這些別扭的操作而放棄直觀的synchronize關 鍵字或者Lock類呢?不過,這里不是想討論這個,而是當其用Atomic Classes來改造它的打字程序后,解釋用原子類只是保證類似遞增、遞減、賦值等操作的原子性,而不能保證其所在的方法一定是線程安全的,然后說,有可 能按鍵事件的處理可能需要等待resetScore()處理完才能執行,而這會導致錯誤的評分(被當成多敲了鍵)。由于前幾章的內容相對比較簡單易懂,所 以也沒有很仔細的運行那些例子。這里為了驗證一下,就運行了一下第4章的例子,然后發現,基本上第一次的評分總是錯的。這就引起了我的注意,因為,一般情 況下,如果是race condition導致的錯誤是很難重現的,這么明顯的錯誤很可能是程序邏輯上的錯誤。仔細看了一下代碼,發現在start按鈕的事件處理方法里,有下面 這樣一段代碼:
    startButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                    displayCanvas.setDone(false);
                    producer.setDone(false);
                    startButton.setEnabled(false);
                    stopButton.setEnabled(true);
                    feedbackCanvas.setEnabled(true);
                    feedbackCanvas.requestFocus();
                    score.resetScore();
                }
            });
    注意重置成績的調用放在了最后,此時,隨機生成字符的線程應該被喚醒并產生了第一個字符,然后,resetScore()將需要輸入的字符又設成了-1, 所以,當你第一次輸入字符時,總是被認為是多擊了一次鍵而扣1分:(。既然這樣,那停止然后再啟動也應該會發生這個錯誤啊。而事實上的確是這樣。我想,這 不應該看做是race condition吧,有什么樣的同步技術能夠避免這個問題呢?除非另外弄個標志,當成績沒有被重置前,不能產生第一個字符。當然,這是不需要的,只要將 score.resetScore()放到第一句就可以了。

    然 后又運行了第3章的例子,發現基本上沒有這個問題。難道第3章的代碼是正確的?打開源代碼一看,重置成績的方法還是放在最后,那這里為什么又是正確的呢? 我想,大約是第3章的例子中,每次點擊start按鈕,都重新創建一個線程對象的原因吧。由于創建對象和初始化線程需要一定的時間,剛好給了主線程重置成 績的機會。

    不知道作者有意為之呢,還是疏忽,不過,這樣的錯誤不能算是race condition的例子。

    posted on 2006-03-09 23:00 Vincent.Chen 閱讀(110) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 一个人看的免费视频www在线高清动漫| 精品亚洲AV无码一区二区三区 | 免费高清资源黄网站在线观看| 久久综合九九亚洲一区| 好吊色永久免费视频大全| 亚洲国产精品国产自在在线| 亚洲精品美女久久7777777| 亚洲高清中文字幕免费| 亚洲午夜精品一区二区公牛电影院| 67pao强力打造高清免费| 亚洲依依成人精品| 国产精品怡红院永久免费| 三年片在线观看免费西瓜视频| 久久久精品国产亚洲成人满18免费网站| 色多多www视频在线观看免费| 国产成人无码免费视频97| 国产精品亚洲五月天高清| 亚洲国模精品一区| 一区二区三区免费电影| 色久悠悠婷婷综合在线亚洲| 最近中文字幕大全免费版在线| 亚洲av色福利天堂| 在线视频精品免费| 亚洲精品理论电影在线观看| 亚洲高清无码专区视频| 一个人看的在线免费视频| 久久伊人久久亚洲综合| 免费视频专区一国产盗摄| 蜜臀亚洲AV无码精品国产午夜.| 亚洲一区视频在线播放| 国产高清不卡免费视频| 亚洲三级高清免费| 亚洲日韩国产精品乱| 无码人妻AV免费一区二区三区| 亚洲综合久久一本伊伊区| 亚洲AⅤ永久无码精品AA| 大地资源在线资源免费观看| 亚洲人成网站在线观看播放动漫 | 免费人成视频在线观看不卡| 两个人的视频www免费| 亚洲日本香蕉视频|