A. java自定義事件,線程a如何每一秒鍾觸發一個事件,然後另一個線程b監聽之,並作出反應
線程a是作為事件源,那麼線程a這個類就必須提供一個可以增加監聽器的方法,就像GUI編程中的addActionListener這個樣的方法。線程a這個類裡面是有一個專門存放監聽器的一個容器,例如是list。然後你 增加監聽器的方法就是把監聽器放進這個容器裡面。你用一個監聽器去監聽一個事件的發生,就可以在線程a這個類中,寫一個產生事件的一段代碼,然後每當產生一個事件之後,去遍歷list,去調用監聽器的對於這個事件的處理方法,這樣子就可以了。這應該就是java中的事件模式。
B. java如何監控線程是否在運行
判斷是否在運行用isAlive方法哈。。
給你寫了個例子。。不知是不是你想要的。。
public class Thread100 {
/**
* @param args
*/
public static ThreadA ta = new ThreadA();
public static ThreadB tb = new ThreadB();
public static void main(String[] args) {
ta.start();
tb.start();
}
}
class ThreadA extends Thread {
@Override
public void run() {
int i = 0;
while(i < 100) {
if(Thread100.tb.isAlive()) {
System.out.println("B is alive");
}
System.out.println(i);
i++;
}
}
}
class ThreadB extends Thread {
@Override
public void run() {
int i = 0;
while(i < 100) {
if(Thread100.ta.isAlive()) {
System.out.println("A is alive");
}
System.out.println(i);
i++;
}
}
}
C. java多線程訪問
可以BC
線程同步有個同步鎖,當一個線程進入那個synchronized的方法後,就鎖起了。其他線程進不去
D. java中能否監聽一個線程是否結束 我希望在當前線程結束時寫日誌
線程結束的標志是run()函數執行完畢。如果你要判斷的話 用 線程名.isAlive();
E. java 多線程監聽數據表的改變,怎麼解決同步問題
噢,是這樣的,不是什麼東西都能當做鎖,你不能這樣理解。
synchronized(obj),obj這里是你所在類的MIDlet的一個實例對象。
目的是解決因線程不同步而對數據造成破壞的問題。
假如:在一個類中有一個成員變數a,還有兩個線程,如果線程不同步的話,這兩個線程有可能同時訪問同一個變數a,這樣的話,就會出現問題,最後執的結果a到底是幾呢,所以就要使用線程同步這個辦法了。
使用線程同步後,線程1在訪問a的時候,我加了一把鎖,在這個時候別的線程是不允許訪問a的,等線程1對a有訪問結束後,就會去掉這把鎖,其他的線程再訪問a的時候,又會加鎖,這樣在同一時候,只能有一方訪問a,這樣就不會出現問題,我說這么多,你明白了嗎?希望你能明白,不然我說的算白說了,呵呵!!!!
F. 如何監視Java多線程的狀態
線程池的地方在新增或者刪除線程的時候加一個debug信息。 如果在命令行下面啟動的話用ctrl + break就可以看到當前哪些線程在運行了。。。
G. java中如何監聽一個線程的結束
你可以把thread的執行的代碼 全部TRY CATCH起來啊 如果報異常了 就發送請求給SERVLET啊 如果正常結束完成 你也可以坐響應的處理啊 。
Runtime.getRuntime().addShutdownHook(Thread);當程序出現問題時會先啟動Thread這個線程,
幫你解決記錄或或者其他線程的關閉。
H. java中的事件監聽是怎樣實現隨時監聽的,是通過線程嗎
java中的事件監聽不是通過線程實現的,它是通過一種注冊--通知機制實現的。在java的設計模式中,有一種模式叫:觀察者模式,和這個類似。
I. 求java寫的多線程socket埠監聽伺服器端程序,要代界面的.
業務需要這么復雜嗎???如果你要實現伺服器和客戶端都可以向對方發送消息,而不等待對方應答,只需要把InputStream和OutputStream分別放在兩個不同線程里就行了,即是說把接收流與發送流分別用一個線程監聽處理。如果要實現不分客戶端伺服器的話,用UDP通信即可
補充回答:如果不涉及到MIME,只是收發簡單文本郵件。就會比較簡單。因為就像你說的,smtp和pop3協議就是文本格式的。你用Socket建立連接後,就像讀文件一樣,一行一行的讀數據,然後按照協議分析數據格式。例如如果開始時USER那麼後面可能跟的就是用戶等。
就是一個字元串解析和匹配的過程。網上好像有這類代碼,自己找一個學習一下。我以前用C在68k上作過,不是很難。不過代碼已經沒有了。
你的是郵件客戶端,功能類似於outlook,foxmail等,如果你能上網,就不需要郵件伺服器,直接用自己的郵件賬號來測試,例如如果你有一個sina的郵件賬戶,就可以從sina伺服器收發郵件。
不過為了測試方便,還是上網去收一個郵件伺服器把。例如foxmail server等。網上有教程,可以配置好的。
對於編程,既然要求用socket編寫,那麼就要熟悉java的socket編程,這部分倒是很簡單。可能還需要看看多線程部分。
另外,你需要學習一下, smtp和pop3這兩個網路協議的內容,因為你需要解析這兩個協議。如果需要收發代附件的,還需要看mime的內容,不過估計不需要。
其實java有自己的類庫javamail,可以實現手法郵件,功能很強大。不過既然要求必須用socket,那就不能這個了。
說的太羅嗦了。總結一下:
1)配置郵件伺服器,搭建測試環境
2)熟悉java的socket編程、 Swing編程(編寫界面)、多線程(選用)
3)熟悉smtp和pop3的內容(內容很多,了解基本的就可以)
網上應該有類似代碼,可以用來參考。
J. java 多線程問題 真的提高了效率嗎
你鑽了牛角尖了。不要從cpu耗時上看,並行一般是為了任務處理。並發是為了資源共享和資源的充分利用。二者可比性不大。
你所說的cpu一般是指,分時系統中的cpu,比如linux,其中一個用戶A的一個線程要30個小時完成,另外一個用戶B的線程需要1000個小時。而且其中需要用戶不斷響應,如果沒有並發,B用戶先開始,A用戶需要等待1030小時。如果使用並發,A用戶可能四五十個小時就搞定了。如果A和B都比較有money,一人買一台,沒有這個問題的。這就是並行。資源充足怎麼著都行,資源不足只能找折中方案了。
如果你覺得這是進程的概念,java里一樣的。你做過web開發吧。你肯定不想每個請求都分一個伺服器吧。開發一個網頁,一台電腦同時有上千個人訪問你的tomcat,一般不會有問題。瀏覽也順暢。這就是並發的作用。這種情況如果使用單線程。一千個人有999個人等著看你的網頁,而第一個人操作的時候cpu大部分時間是空閑的。怎麼利用起來就成了個問題。這也叫效率。
如果確實必須要考慮問題處理的效率問題。你訪問資料庫的時候用過線程池嗎?是不是能縮短訪問資料庫所耗費的時間。所以效率高不高不能只看cpu用了多少時間。你可以再考慮考慮,不用多線程,你怎麼設計一個單線程程序,同時監聽鍵盤和麥克風的信息錄入?
其實計算機底層是有天然的非同步特性的。這個東西就是中斷。有些耗時的io操作,什麼時候處理完是可以不用管的。剩下的無關線程就可以自由自在的進行了。這樣效率是不是也高了。
單cpu一般也是多核的。