java thread一個容易犯的錯誤

作者:高飛

轉載請註明出處:http://blog.csdn.net/soartju



最近對以前的代碼進行重構,在主線程中,有些函數方法運行的時間過長,導致主線程處理時間過長。

很自然,想到了Thread,將時間較長的方法放到一個新的Thread中運行,主線程就可以很快完成一次循環,不影響主線程中定期timer程序處理。



最初,原有代碼修改如下:

1. //A:main Thread code here
2.
3. new Thread(){
4. public void run() {
5. OldMethod();//原來的一些程序操作,時間較長
6. }
7. }.run();
8.
9. //B:main Thread code here

相信大家都已經發現問題所在,這個內嵌的Thread調用了run()方法。



這樣問題就出現了,運行一下程序,發現這段new Thread的程序並沒有如我們預想的和主線程同時運行,而是和主線程串行的運行,即主線程執行完A段代碼後,繼續執行new Thread()中的run代碼,等run()執行後,再執行後便的B段代碼。



原因就出在了調用的是Thread的run()方法,這樣就相當於調用了一個普通類的方法,導致並沒有創建新的線程來運行run()中的代碼。



下面給出正確的代碼:

1. //A:main Thread code here
2.
3. new Thread(){
4. public void run() {
5. OldMethod();//原來的一些程序操作,時間較長
6. }
7. }.start();//創建一個新的線程運行run()中的程序
8.
9. //B:main Thread code here
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章