不管我是多么喜歡JAVA但是,從實(shí)際開發(fā)角度講,Java的多線程確實(shí)沒有C++好使。
表現(xiàn)在:
1.Java沒有全局變量;
2.Java 的線程之間的通信比較差,C++提供了多種通信方式;
3.Java的數(shù)據(jù)同步是通過synchronized來實(shí)現(xiàn),但是基本上等于交給了虛擬機(jī)來完成,
而C++有很多種:臨界區(qū)、互斥體等。
4. Java的多線程run方法沒有返回值,因此如何能得到子線程的反饋信息,確實(shí)令人頭疼。
5.Java的多線程是協(xié)作式,這樣等于操作系統(tǒng)放棄了對(duì)線程的控制;
這里談?wù)勎以趈ava多線程中的編寫經(jīng)驗(yàn):
1.創(chuàng)建thread時(shí),將主控類或者叫做調(diào)用類傳入構(gòu)造函數(shù)中,例如:
Class A調(diào)用Class B,Class A作為Class B構(gòu)造函數(shù)的參數(shù)。
這樣再創(chuàng)建一個(gè)子線程時(shí),用同樣的方式實(shí)現(xiàn),這樣主控類的實(shí)例變量就可以作為
全局變量,當(dāng)然要注意同步。
2. 類同步中wait(),notify()一定要考慮好邏輯,不然有可能造成阻塞。
3. 如果多個(gè)線程調(diào)用或者目前不是很清楚有多少個(gè)線程進(jìn)行通信,最好的辦法是
自己實(shí)現(xiàn)一個(gè)listener,然后調(diào)用類調(diào)用Listener的一個(gè)實(shí)例方法進(jìn)行通信。
工作原理:
1) Listener接口提供同步方法 例如SynData();
2) 同步線程提供添加和刪除Listener的方法,同時(shí)在線程中對(duì)注冊(cè)Listener
的類進(jìn)行輪流通知;
3) 使用給同步數(shù)據(jù)的線程類,繼承Listener接口,實(shí)現(xiàn)其方法,將本線程即將結(jié)束的數(shù)據(jù)發(fā)送到同步線程中;
其實(shí)這個(gè)原理來自于Java Swing技術(shù)。
由于時(shí)間關(guān)系,今天就談到這里,希望能拋磚引玉??!請(qǐng)大家多多指教!
下一次談一談我用上面的方式實(shí)現(xiàn)的一個(gè)網(wǎng)關(guān)實(shí)例,謝謝各位!
表現(xiàn)在:
1.Java沒有全局變量;
2.Java 的線程之間的通信比較差,C++提供了多種通信方式;
3.Java的數(shù)據(jù)同步是通過synchronized來實(shí)現(xiàn),但是基本上等于交給了虛擬機(jī)來完成,
而C++有很多種:臨界區(qū)、互斥體等。
4. Java的多線程run方法沒有返回值,因此如何能得到子線程的反饋信息,確實(shí)令人頭疼。
5.Java的多線程是協(xié)作式,這樣等于操作系統(tǒng)放棄了對(duì)線程的控制;
這里談?wù)勎以趈ava多線程中的編寫經(jīng)驗(yàn):
1.創(chuàng)建thread時(shí),將主控類或者叫做調(diào)用類傳入構(gòu)造函數(shù)中,例如:
Class A調(diào)用Class B,Class A作為Class B構(gòu)造函數(shù)的參數(shù)。
這樣再創(chuàng)建一個(gè)子線程時(shí),用同樣的方式實(shí)現(xiàn),這樣主控類的實(shí)例變量就可以作為
全局變量,當(dāng)然要注意同步。
2. 類同步中wait(),notify()一定要考慮好邏輯,不然有可能造成阻塞。
3. 如果多個(gè)線程調(diào)用或者目前不是很清楚有多少個(gè)線程進(jìn)行通信,最好的辦法是
自己實(shí)現(xiàn)一個(gè)listener,然后調(diào)用類調(diào)用Listener的一個(gè)實(shí)例方法進(jìn)行通信。
工作原理:
1) Listener接口提供同步方法 例如SynData();
2) 同步線程提供添加和刪除Listener的方法,同時(shí)在線程中對(duì)注冊(cè)Listener
的類進(jìn)行輪流通知;
3) 使用給同步數(shù)據(jù)的線程類,繼承Listener接口,實(shí)現(xiàn)其方法,將本線程即將結(jié)束的數(shù)據(jù)發(fā)送到同步線程中;
其實(shí)這個(gè)原理來自于Java Swing技術(shù)。
由于時(shí)間關(guān)系,今天就談到這里,希望能拋磚引玉??!請(qǐng)大家多多指教!
下一次談一談我用上面的方式實(shí)現(xiàn)的一個(gè)網(wǎng)關(guān)實(shí)例,謝謝各位!