新聞中心
用怎樣的JAVA代碼結(jié)束指定進(jìn)程?
1 線程正常執(zhí)行完畢,正常結(jié)束。 也就是讓run方法執(zhí)行完畢,該線程就會(huì)正常結(jié)束。 2 監(jiān)視某些條件,結(jié)束線程的不間斷運(yùn)行。 然而,常常有些線程是伺服線程。它們需要長時(shí)間的運(yùn)行,只有在外部某些條件滿足的情況下,才能關(guān)閉這些線程。 通常,它們執(zhí)行在一個(gè)while(true)的死循環(huán)中。 如: publicvoid run() { while(true){ someWork(); if(finished){ break; } try { Thread.sleep(10000); } catch (InterruptedException e) { /* TODO自動(dòng)生成 catch 塊 * */ e.printStackTrace(); } } } 我們可以在while死循環(huán)內(nèi),每次循環(huán)時(shí),察看外部條件,看看是否需要關(guān)閉當(dāng)前線程。如果是,就break,跳出死循環(huán),或者是拋出異常,跳出死循環(huán),結(jié)束線程。 3 捕獲InterruptedException 運(yùn)行時(shí)異常,中斷當(dāng)前線程。 有些執(zhí)行伺服任務(wù)的線程,在while(true)這樣的死循環(huán)內(nèi)部,是一個(gè)阻塞中的方法。此時(shí),就不能采用第二種方法了。因?yàn)?,?dāng)該方法沒有返回時(shí),該線程一直處于阻塞當(dāng)中,根本無法執(zhí)行其他語句。 此時(shí),就需要調(diào)用該線程的interrupt方法,產(chǎn)生一個(gè)InterruptedException運(yùn)行時(shí)異常,是阻塞中的那個(gè)方法拋出這個(gè)異常,從而讓我們有機(jī)會(huì)結(jié)束這個(gè)線程的執(zhí)行。 如: publicvoid run() { while(true){ try { // getSendMessages 是BlockingQueue類。它的take方法將會(huì)阻塞! responseMessage = this.getSendMessages().take(); } catch (InterruptedException e1) { thrownew RuntimeException(); //或者break; } someWork(); } 一個(gè)外部的Thread 對(duì)象 指向這個(gè)線程。 需要結(jié)束這個(gè)線程時(shí),只需要調(diào)用thread對(duì)象的interrupt() 方法,就會(huì)在responseMessage = this.getSendMessages()。take(); 這條語句中產(chǎn)生一個(gè)InterruptedException異常,從而結(jié)束該線程的阻塞狀態(tài),通過拋出異常,或者break跳出死循環(huán),結(jié)束這個(gè)線程。
十多年的海興網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整海興建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“海興網(wǎng)站設(shè)計(jì)”,“海興網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
java怎么強(qiáng)行終止程序
在java程序中,可以使用java.lang.System的exit方法來終止程序的執(zhí)行,
12345678
public static void main(String[] args) { System.out.println("開始進(jìn)入程序..."); //do something System.out.println("程序準(zhǔn)備退出了!"); System.exit(0); //下面這句話將不會(huì)打印出來 System.out.println("程序已經(jīng)退出了!");}
但是使用exit方法的本質(zhì)是終止了JVM的運(yùn)行,如果同時(shí)運(yùn)行了另外一個(gè)程序,使用exit方法同樣也會(huì)使該程序也終止,要避免此種情況可以使用interrupt()來中斷退出一個(gè)獨(dú)立運(yùn)行的過程。對(duì)于多線程程序,必須要關(guān)閉各個(gè)非守護(hù)線程。
1234567891011121314151617181920212223
public static void main(String[] args) { System.out.println("開始進(jìn)入程序..."); //do something new Thread(){ public void run() { while (true) { System.out.println("我是另外的線程..."); try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }.start(); //獲取man線程 Thread main = Thread.currentThread(); System.out.println(main.getName()); main.interrupt(); System.out.println("main線程已經(jīng)退出了,但是不影響其他線程運(yùn)行!"); }
只有在程序非正常退出時(shí),才使用exit方法退出程序。
如何用Java關(guān)閉一個(gè)進(jìn)程
解決這個(gè)問題,要看這個(gè)進(jìn)程是java程序自定義的進(jìn)程,還是操作系統(tǒng)的進(jìn)程,操作系統(tǒng)的進(jìn)程,又可以分為windows進(jìn)程和Linux進(jìn)程
一、針對(duì)操作系統(tǒng)的進(jìn)程:
1,首先java用戶,要具有操作進(jìn)程的權(quán)限
2. 針對(duì)windows操作系統(tǒng)的進(jìn)程,比如QQ進(jìn)程:
String?command?=?"taskkill?/f?/im?QQ.exe";??
Runtime.getRuntime().exec(command);
其中:taskkill 是命令名稱,/f /im 是參數(shù),QQ.exe是進(jìn)程的可執(zhí)行文件。
3.針對(duì)Linux操作系統(tǒng)
String?command?=?"kill?/f?/im?QQ.exe";??
Runtime.getRuntime().exec(command);
二、在Java程序中自定義的進(jìn)程
思路:在線程中設(shè)置一個(gè)標(biāo)志變量,當(dāng)這個(gè)變量的值在外界被改變的時(shí)候,有機(jī)會(huì)結(jié)束運(yùn)行的線程
public?class?T?{
public?static?void?main(String[]?args)?{
//?啟動(dòng)線程
MyThread?thread?=?new?MyThread();
new?Thread(thread).start();
//?你的其它的工作,此時(shí)線程在運(yùn)行中
//?你不想讓線程干活了,停掉它
//?注意,這只是一個(gè)標(biāo)志,具體線程何時(shí)停,并不能精確控制
thread.allDone?=?true;
}
}?
class?MyThread?implements?Runnable?{
boolean?volatile?allDone?=?false;
public?void?run()?{
//?每次循環(huán)都檢測標(biāo)志
//?如果設(shè)置停止標(biāo)志時(shí)已經(jīng)在循環(huán)里
//?則最長需要等待一個(gè)循環(huán)的時(shí)間才能終止
while?(!allDone)?{
//?循環(huán)里的工作
}
}
}
求助:java,怎樣代碼實(shí)現(xiàn)結(jié)束正在運(yùn)行的程序?
1.
public class TestShutDownHook {
2.
public TestShutDownHook() {
3.
doShutDownWork();
4.
}
5.
private void doShutDownWork() {
6.
Runtime run=Runtime.getRuntime();//當(dāng)前 Java 應(yīng)用程序相關(guān)的運(yùn)行時(shí)對(duì)象。
7.
run.addShutdownHook(new Thread(){ //注冊新的虛擬機(jī)來關(guān)閉鉤子
8.
@Override
9.
public void run() {
10.
//程序結(jié)束時(shí)進(jìn)行的操作
11.
System.out.println("程序結(jié)束調(diào)用");
12.
}
13.
});
14.
}
15.
public static void main(String[] args) {
16.
new TestShutDownHook();
17.
for (int i = 0; i 1000; i++) { // 在這里增添您需要處理代碼 }
18.
System.out.println(i);
19.
}
20.
}
21.
}
java程序關(guān)閉窗口代碼
import?java.applet.*;
import?java.awt.Color;
import?java.awt.Frame;
import?javax.swing.JFrame;
import?java.awt.event.*;
public?class?FirstFrame?extends?Frame?{
public?static?void?main(String?args[])?{
FirstFrame?fr?=?new?FirstFrame("First?contianer!");
fr.setSize(240,?240);
//繼承JFrame的關(guān)閉窗口代碼
//fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//繼承Frame的
fr.addWindowListener(new?WindowAdapter()?{????
public?void?windowClosing(WindowEvent?e)?{????????
System.exit(0);//退出系統(tǒng)???
}
});
fr.setVisible(true);
}
public?FirstFrame(String?str)?{
super(str);
}
}
本文標(biāo)題:java代碼關(guān)閉進(jìn)程,java關(guān)閉程序的代碼
網(wǎng)頁地址:http://www.dlmjj.cn/article/dsihjgj.html