Java線程關閉,總的來說有3種:
1.使用狀態位,這個簡單,就不多說了:
public class Task extends Thread {
java多線程應用場景。private volatile boolean flag= true;
public void stopTask() {
flag = false;
}
Java多線程,@Override
public void run() {
while(flag){
/* do your no-block task */
java實現多線程的兩種方法。}
}
}
2.當線程等待某些事件發生而被阻塞,又會發生什么?當然,如果線程被阻塞,它便不能核查共享變量,也就不能停止。這在許多情況下會發生,例如調用 Object.wait()、Thread.sleep等,這里僅舉出一些。他們都可能永久的阻塞線程。即使發生超時,在超時期滿之前持續等待也是不可行和不適當的,所以,要使用某種機制使得線程更早地退出被阻塞的狀態。這個時候你可以使用Thread.interrupt();
java線程交替執行?public class BlockTask extends Thread {
@Override
public void run() {
try {
java多線程同步,while (!Thread.interrupted()) {
/* do your block task*/
}
} catch (Exception e) {
java多線程使用?e.printStackTrace();
}
}
}
java線程執行完會自動關閉嗎,但是上面的代碼或許有些不妥,或許用例子更能把問題說清楚。你怎么知道該代碼段會發生阻塞?interrupt()函數到底是什么意思呢?首先說明的是,interrupted()方法只能解決跑出InterruptedException異常的阻塞。而interrupt()并不是關閉阻塞線程,而是解除阻塞。那這里就舉出一個關閉線程阻塞的例子:
1 public class BlockTask extends Thread {
2 @Override
3 public void run() {
java多線程實例項目?4 try {
5 sleep(10000);
6 } catch (InterruptedException e) {
7 System.out.println("if yout use interrupt you will see me");
java支持多線程,8 }
9
10 }
11 public static void main(String[] args)throws Exception {
12 // TODO Auto-generated method stub
13 BlockTask task = new BlockTask();
14 task.start();
15 Thread.sleep(1000);
16 task.interrupt();
17
18 }
19 }
3.上面說了,interrupt()只能解決InterruptedException的阻塞的線程,那么遇到一些其他的io阻塞怎么處理呢?這個時候java都會提供相應的關閉阻塞的辦法。例如,服務器可能需要等待一個請求(request),又或者,一個網絡應用程序可能要等待遠端主機的響應,這個時候可以使用套接字close()方法
1 public class SocketTask extends Thread {
2 private volatile ServerSocket server;
3
4 public void stopTask(){
5 try {
6 if(server!=null){
7 server.close();
8 System.out.println("close task successed");
9 }
10 } catch (IOException e) {
11 System.out.println("close task failded");
12 }
13 }
14 @Override
15 public void run() {
16 try {
17 server = new ServerSocket(3333);
18 } catch (IOException e) {
19 e.printStackTrace();
20 }
21 }
22
23 public static void main(String[] args) throws InterruptedException {
24
25 SocketTask task = new SocketTask();
26 task.start();
27 Thread.sleep(1000);
28 task.stopTask();
29 }
30
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态