多线程-守护线程-setDaemon
2024-10-19 22:41:35
1 package multithread4;
2 /*
3 * 停止线程:
4 * 1,stop方法。
5 *
6 * 2,run方法结束。
7 *
8 * 怎么控制线程的任务结束呢?
9 * 任务中都会有循环结构,只要控制住循环就可以结束任务,线程就结束
10 *
11 * 控制循环通常就用定义标记来完成。
12 *
13 * 但是如果线程处于冻结状态,无法读取标记。如何结束呢?
14 *
15 * 可以使用interrupt()方法将线程从冻结状态强制恢复到运行状态中来,让线程具备cpu执行资格
16 * 但是强制动作会发生InterruptedException,记得要处理
17 */
18
19
20
21 class StopThread implements Runnable{
22 private boolean flag = true;
23 public synchronized void run() {
24 while(flag) {
25 try {
26 wait();//t0 t1进来都等待了读取不了标记,结束不了任务
27 } catch (InterruptedException e) {
28 System.out.println(Thread.currentThread().getName()+"......."+e);
29 flag = false;
30 }
31 System.out.println(Thread.currentThread().getName()+".....");
32 }
33 }
34 public void setFlag() {
35 flag = false;
36 }
37 }
38 public class DaemonThreadDemo {
39
40 public static void main(String[] args) {
41 // TODO Auto-generated method stub
42 StopThread st = new StopThread();
43
44 Thread t1 = new Thread(st);
45 Thread t2 = new Thread(st);
46
47 t1.start();
48 t2.setDaemon(true);//开启线程2前守护线程, 可以理解为后台线程
49 //如果所有前台线程都结束,后台线程无论处于什么状态都自动结束。
50 //即当正在运行的线程都是守护线程(系统级线程或者用户线程)时,java虚拟机自动退出
51 t2.start();
52
53 int num = 1;
54 for (; ; ) {
55 if (++num == 50) {
56 // st.setFlag();
57 t1.interrupt();
58 // t2.interrupt();
59 break;
60 }
61 System.out.println("main...."+num);
62 }
63 System.out.println("over");
64 }
65
66 }
DaemonThreadDemo
最新文章
- wubi安装ubuntukylin-14.04
- 完整的 mime type 列表
- 在Windows7下启动MongoDB服务的解决方案
- 分享到QQ空间代码(一)
- git123
- FATAL ha.BootstrapStandby: Unable to fetch namespace information from active NN at ***
- 设计模式之桥接模式(Bridge)
- I.MX6 uSDHC SD card register
- OPM与ILE编程模式的区别
- 电源管理之pmu驱动分析
- Selenium webdriver 开始
- C++类的数组元素查找最大值问题
- 开源欣赏wordpress之文章新增页面如何实现。
- 关于Apacheserver的訪问控制
- php Smarty详细配置
- MySQL连接数据库报时区错误:java.sql.SQLException: The server time zone value
- Python原理 -- 深浅拷贝
- Ubuntu apt-get update 失败
- web、pc、wap、app的区别
- 修改input属性placeholder的样式
热门文章
- 【LeetCode】5685. 交替合并字符串 Merge Strings Alternately (Python)
- 【LeetCode】986. Interval List Intersections 解题报告(C++)
- 计算机视觉1->;opencv4学习指南1 | 环境配置与例程
- 「Codeforces 724F」Uniformly Branched Trees
- Oracle 11g安装和PL/SQL连接完全解读(连接本地数据库)
- uniapp中scroll-view自定义滚动条
- JZOJ5966. [NOIP2018TGD2T3] 保卫王国 (动态DP做法)
- Python_多任务:进程、线程、协程
- Git_添加、删除远端仓库中的文件
- unittest_skip跳过用例执行(3)