你如果使用Java
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名與空間、雅安服務器托管、營銷軟件、網站建設、隆昌網站維護、網站推廣。
Media
Framework
2.1(也就是JMF2.1),其中的Player
player;player.stop();方法,就是有暫停功能,
當執行Player
player;player.stop();player.setMediaTime(new
Time(0));后,音樂就停止了,如果執行Player
player;player.stop();,音樂就暫停,直到執行player.start();,音樂繼續.
因此,player.start();有開始播放和暫停后繼續播放的功能,player.stop();有暫停和停止(如果player.setMediaTime(new
Time(0));)的功能.
方案操作如下:
(1)讓程序在一個單獨的線程中運行,然后在終止時,可以用線程的終止方法來結束它。
(2)退出Java程序時盡量不要使用java.lang.System的exit方法。Exit?方法可以終止JVM,從而終止程序,但如果同時運行了另一個Java程序,使用exit方法就會讓該程序也關閉,這顯然不是希望看到的情況?。。。?/p>
要退出Java程序,可以使用destory()退出一個獨立運行的過程。對于多線程程序,必須要關閉各個非守護線程。
只有在程序非正常退出時,才使用exit方法退出程序
JAVA中線程開始有start方法,暫停用sleep(time)方法,線程停止用stop方法,線程等待wait方法,java 中沒有線程重啟一說,只能說線程喚醒notifyAll()或是notify方法,前一個notifyAll()方法是喚醒所有的已休眠或是等待狀態下的線程。具體的一種參數請參照JDK文檔。
Java中的線程的生命周期大體可分為5種狀態。如下:
1.新建(NEW):新創建了一個線程對象。
2.可運行(RUNNABLE):線程對象創建后,其他線程(比如main線程)調用了該對象的start()方法。該狀態的線程位于可運行線程池中,等待被線程調度選中,獲取cpu 的使用權 。
3.運行(RUNNING):可運行狀態(runnable)的線程獲得了cpu 時間片(timeslice) ,執行程序代碼。
4.阻塞(BLOCKED):阻塞狀態是指線程因為某種原因放棄了cpu 使用權,也即讓出了cpu timeslice,暫時停止運行。直到線程進入可運行(runnable)狀態,才有機會再次獲得cpu timeslice 轉到運行(running)狀態。阻塞的情況分三種:
(一).等待阻塞:運行(running)的線程執行o.wait()方法,JVM會把該線程放入等待隊列(waitting queue)中。
(二).同步阻塞:運行(running)的線程在獲取對象的同步鎖時,若該同步鎖被別的線程占用,則JVM會把該線程放入鎖池(lock pool)中。
(三).其他阻塞:運行(running)的線程執行Thread.sleep(long ms)或t.join()方法,或者發出了I/O請求時,JVM會把該線程置為阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入可運行(runnable)狀態。
5.死亡(DEAD):線程run()、main() 方法執行結束,或者因異常退出了run()方法,則該線程結束生命周期。死亡的線程不可再次復生。
終止線程的三種方法:
1. 使用退出標志,使線程正常退出,也就是當run方法完成后線程終止。?
2. 使用stop方法強行終止線程(這個方法不推薦使用,因為stop和suspend、resume一樣,也可能發生不可預料的結果)。
3. 使用interrupt方法中斷線程。?
1. 使用退出標志終止線程?
當run方法執行完后,線程就會退出。但有時run方法是永遠不會結束的。如在服務端程序中使用線程進行監聽客戶端請求,或是其他的需要循環處理的任務。在這種情況下,一般是將這些任務放在一個循環中,如while循環。如果想讓循環永遠運行下去,可以使用while(true){……}來處理。但要想使while循環在某一特定條件下退出,最直接的方法就是設一個boolean類型的標志,并通過設置這個標志為true或false來控制while循環是否退出。下面給出了一個利用退出標志終止線程的例子。?
package?chapter2;?
public?class?ThreadFlag?extends?Thread?
{?
public?volatile?boolean?exit?=?false;?
public?void?run()?
{?
while?(!exit);?
}?
public?static?void?main(String[]?args)?throws?Exception?
{?
ThreadFlag?thread?=?new?ThreadFlag();?
thread.start();?
sleep(5000);?//?主線程延遲5秒?
thread.exit?=?true;?//?終止線程thread?
thread.join();?
System.out.println("線程退出!");?
}?
}
在上面代碼中定義了一個退出標志exit,當exit為true時,while循環退出,exit的默認值為false.在定義exit時,使用了一個Java關鍵字volatile,這個關鍵字的目的是使exit同步,也就是說在同一時刻只能由一個線程來修改exit的值,?
2. 使用stop方法終止線程?
使用stop方法可以強行終止正在運行或掛起的線程。我們可以使用如下的代碼來終止線程:?
thread.stop();?
雖然使用上面的代碼可以終止線程,但使用stop方法是很危險的,就象突然關閉計算機電源,而不是按正常程序關機一樣,可能會產生不可預料的結果,因此,并不推薦使用stop方法來終止線程。?
3. 使用interrupt方法終止線程?
使用interrupt方法來終端線程可分為兩種情況:?
(1)線程處于阻塞狀態,如使用了sleep方法。?
(2)使用while(!isInterrupted()){……}來判斷線程是否被中斷。?
在第一種情況下使用interrupt方法,sleep方法將拋出一個InterruptedException例外,而在第二種情況下線程將直接退出。下面的代碼演示了在第一種情況下使用interrupt方法。?
package?chapter2;?
public?class?ThreadInterrupt?extends?Thread?
{?
public?void?run()?
{?
try?
{?
sleep(50000);?//?延遲50秒?
}?
catch?(InterruptedException?e)?
{?
System.out.println(e.getMessage());?
}?
}?
public?static?void?main(String[]?args)?throws?Exception?
{?
Thread?thread?=?new?ThreadInterrupt();?
thread.start();?
System.out.println("在50秒之內按任意鍵中斷線程!");?
System.in.read();?
thread.interrupt();?
thread.join();?
System.out.println("線程已經退出!");?
}?
}
上面代碼的運行結果如下:?
在50秒之內按任意鍵中斷線程!?
sleep interrupted?
線程已經退出!?
在調用interrupt方法后, sleep方法拋出異常,然后輸出錯誤信息:sleep interrupted.?
注意:在Thread類中有兩個方法可以判斷線程是否通過interrupt方法被終止。一個是靜態的方法interrupted(),一個是非靜態的方法isInterrupted(),這兩個方法的區別是interrupted用來判斷當前線是否被中斷,而isInterrupted可以用來判斷其他線程是否被中斷。因此,while (!isInterrupted())也可以換成while (!Thread.interrupted())。
當前標題:java暫停stop代碼 java暫停程序的代碼
標題路徑:http://vcdvsql.cn/article28/ddcchcp.html
成都網站建設公司_創新互聯,為您提供面包屑導航、Google、、外貿建站、軟件開發、網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯