java多線程應用場景,java 多線程為什么不建議使用onstop onsuspend_java多線程stop,suspend使用代碼實際例子...

 2023-11-30 阅读 25 评论 0

摘要:Java線程關閉,總的來說有3種:1.使用狀態位,這個簡單,就不多說了:public class Task extends Thread {java多線程應用場景。private volatile boolean flag= true;public void stopTask() {flag = false;}Java多線程,@Overrid

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

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/186672.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息