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

最新文章

  1. wubi安装ubuntukylin-14.04
  2. 完整的 mime type 列表
  3. 在Windows7下启动MongoDB服务的解决方案
  4. 分享到QQ空间代码(一)
  5. git123
  6. FATAL ha.BootstrapStandby: Unable to fetch namespace information from active NN at ***
  7. 设计模式之桥接模式(Bridge)
  8. I.MX6 uSDHC SD card register
  9. OPM与ILE编程模式的区别
  10. 电源管理之pmu驱动分析
  11. Selenium webdriver 开始
  12. C++类的数组元素查找最大值问题
  13. 开源欣赏wordpress之文章新增页面如何实现。
  14. 关于Apacheserver的訪问控制
  15. php Smarty详细配置
  16. MySQL连接数据库报时区错误:java.sql.SQLException: The server time zone value
  17. Python原理 -- 深浅拷贝
  18. Ubuntu apt-get update 失败
  19. web、pc、wap、app的区别
  20. 修改input属性placeholder的样式

热门文章

  1. 【LeetCode】5685. 交替合并字符串 Merge Strings Alternately (Python)
  2. 【LeetCode】986. Interval List Intersections 解题报告(C++)
  3. 计算机视觉1->opencv4学习指南1 | 环境配置与例程
  4. 「Codeforces 724F」Uniformly Branched Trees
  5. Oracle 11g安装和PL/SQL连接完全解读(连接本地数据库)
  6. uniapp中scroll-view自定义滚动条
  7. JZOJ5966. [NOIP2018TGD2T3] 保卫王国 (动态DP做法)
  8. Python_多任务:进程、线程、协程
  9. Git_添加、删除远端仓库中的文件
  10. unittest_skip跳过用例执行(3)