程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java線程封閉的3種辦法

Java線程封閉的3種辦法

編輯:關於JAVA

Java線程封閉的3種辦法。本站提示廣大學習愛好者:(Java線程封閉的3種辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Java線程封閉的3種辦法正文


Java線程封閉,總的來講有3種:

1.應用狀況位,這個簡略,就不多說了:

public class Task extends Thread {

private volatile boolean flag= true;

public void stopTask() {

flag = false;

}

@Override

public void run() {

while(flag){

/* do your no-block task */

}

}

}

2.當線程期待某些事宜產生而被壅塞,又會產生甚麼?固然,假如線程被壅塞,它便不克不及核對同享變量,也就不克不及停滯。這在很多情形下會產生,例如挪用 Object.wait()、Thread.sleep等,這裡僅舉出一些。他們都能夠永遠的壅塞線程。即便產生超時,在超時代滿之前連續期待也是弗成行和不恰當的,所以,要應用某種機制使得線程更早地加入被壅塞的狀況。這個時刻你可使用

Thread.interrupt();

public class BlockTask extends Thread {

@Override

public void run() {

try {

while (!Thread.interrupted()) {

/* do your block task*/

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

然則下面的代碼也許有些不當,也許用例子更能把成績說清晰。你怎樣曉得該代碼段會產生壅塞?interrupt()函數究竟是甚麼意思呢?起首解釋的是,interrupted()辦法只能處理跑出InterruptedException異常的壅塞。而interrupt()其實不是封閉壅塞線程,而是消除壅塞。那這裡就舉出一個封閉線程壅塞的例子:

public class BlockTask extends Thread {

@Override

public void run() {

try {

sleep(10000);

} catch (InterruptedException e) {

System.out.println("if yout use interrupt you will see me");

}


}

public static void main(String[] args)throws Exception {

// TODO Auto-generated method stub

BlockTask task = new BlockTask();

task.start();

Thread.sleep(1000);

task.interrupt();


}

}

3.下面說了,interrupt()只能處理InterruptedException的壅塞的線程,那末碰到一些其他的io壅塞怎樣處置呢?這個時刻java都邑供給響應的封閉壅塞的方法。例如,辦事器能夠須要期待一個要求(request),又或許,一個收集運用法式能夠要期待遠端主機的呼應,這個時刻可使用套接字close()辦法

public class SocketTask extends Thread {

private volatile ServerSocket server;


public void stopTask(){

try {

if(server!=null){

server.close();

System.out.println("close task successed");

}

} catch (IOException e) {

System.out.println("close task failded");

}

}

@Override

public void run() {

try {

server = new ServerSocket(3333);

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) throws InterruptedException {


SocketTask task = new SocketTask();

task.start();

Thread.sleep(1000);

task.stopTask();

}

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved