1. 1 package multithread4;
  2. 2 /*
  3. 3 * 停止线程:
  4. 4 * 1,stop方法。
  5. 5 *
  6. 6 * 2,run方法结束。
  7. 7 *
  8. 8 * 怎么控制线程的任务结束呢?
  9. 9 * 任务中都会有循环结构,只要控制住循环就可以结束任务,线程就结束
  10. 10 *
  11. 11 * 控制循环通常就用定义标记来完成。
  12. 12 *
  13. 13 * 但是如果线程处于冻结状态,无法读取标记。如何结束呢?
  14. 14 *
  15. 15 * 可以使用interrupt()方法将线程从冻结状态强制恢复到运行状态中来,让线程具备cpu执行资格
  16. 16 * 但是强制动作会发生InterruptedException,记得要处理
  17. 17 */
  18. 18
  19. 19
  20. 20
  21. 21 class StopThread implements Runnable{
  22. 22 private boolean flag = true;
  23. 23 public synchronized void run() {
  24. 24 while(flag) {
  25. 25 try {
  26. 26 wait();//t0 t1进来都等待了读取不了标记,结束不了任务
  27. 27 } catch (InterruptedException e) {
  28. 28 System.out.println(Thread.currentThread().getName()+"......."+e);
  29. 29 flag = false;
  30. 30 }
  31. 31 System.out.println(Thread.currentThread().getName()+".....");
  32. 32 }
  33. 33 }
  34. 34 public void setFlag() {
  35. 35 flag = false;
  36. 36 }
  37. 37 }
  38. 38 public class DaemonThreadDemo {
  39. 39
  40. 40 public static void main(String[] args) {
  41. 41 // TODO Auto-generated method stub
  42. 42 StopThread st = new StopThread();
  43. 43
  44. 44 Thread t1 = new Thread(st);
  45. 45 Thread t2 = new Thread(st);
  46. 46
  47. 47 t1.start();
  48. 48 t2.setDaemon(true);//开启线程2前守护线程, 可以理解为后台线程
  49. 49 //如果所有前台线程都结束,后台线程无论处于什么状态都自动结束。
  50. 50 //即当正在运行的线程都是守护线程(系统级线程或者用户线程)时,java虚拟机自动退出
  51. 51 t2.start();
  52. 52
  53. 53 int num = 1;
  54. 54 for (; ; ) {
  55. 55 if (++num == 50) {
  56. 56 // st.setFlag();
  57. 57 t1.interrupt();
  58. 58 // t2.interrupt();
  59. 59 break;
  60. 60 }
  61. 61 System.out.println("main...."+num);
  62. 62 }
  63. 63 System.out.println("over");
  64. 64 }
  65. 65
  66. 66 }

DaemonThreadDemo

多线程-守护线程-setDaemon的更多相关文章

  1. python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon)

    python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon) 前言 今天小编YOYO请xiaoming和xiaowang吃火锅,吃完火锅的时候会有以下三种场景: - ...

  2. java线程 - 多线程 - 守护线程

    1.多线程执行者/处理类 都是Runnable的实现类(如自定义类实现Runnable 或 java原生的Thread.FutureTask),但最后都必须封装成Thread线程类由Thread.st ...

  3. Python多线程-守护线程

    守护线程:守护着非守护线程,守护线程和非守护线程同时运行,当非守护线程运行结束后,无论守护线程有没有运行完,脚本都会停止运行 首先看一段普通的多线程实例 # -*- coding:utf-8 -*- ...

  4. python 并发编程 多线程 守护线程

    做完工作这个进程就应该被销毁 单线程情况: 一个进程 ,默认有一个主线程 ,这个主线程执行完代码后 ,就应该自动销毁.然后进程也销毁. 多线程情况: 主线程代表进程结束 一个进程可以开多个线程,默认开 ...

  5. 并发编程~~~多线程~~~守护线程, 互斥锁, 死锁现象与递归锁, 信号量 (Semaphore), GIL全局解释器锁

    一 守护线程 from threading import Thread import time def foo(): print(123) time.sleep(1) print('end123') ...

  6. 多线程、死锁、线程安全、同步方法、代码块、休眠、守护线程、Thread、Runnable(二十三)

    1.多线程的引入 * 1.什么是线程 * 线程是程序执行的一条路径, 一个进程中可以包含多条线程 * 多线程并发执行可以提高程序的效率, 可以同时完成多项工作* 2.多线程的应用场景 * 红蜘蛛同时共 ...

  7. java多线程与线程间通信

    转自(http://blog.csdn.net/jerrying0203/article/details/45563947) 本文学习并总结java多线程与线程间通信的原理和方法,内容涉及java线程 ...

  8. java笔记--守护线程的应用

    守护线程的应用 Java中的线程可以分为两类,即用户线程和守护线程.用户线程是为了完成任务,而守护线程是为其他线程服务 --如果朋友您想转载本文章请注明转载地址"http://www.cnb ...

  9. join和 Daemon守护线程

    一.前言 一个程序至少有一个主线程,主线程启动子线程后,它们之间并没有隶属关系.主线程和子线程执行是并行的,相互独立.主线程执行完毕后默认不等子线程执行结束就接着往下走了,如果有其他程序就会运行另外的 ...

随机推荐

  1. NULL在oracle和mysql索引上的区别

    一.问题 oracle的btree索引不存储NULL值,所以用is null或is not null都不会用到索引范围扫描,但是在mysql中也是这样吗? 二.实验 先看看NULL在oracle(11 ...

  2. 【LeetCode】266. Palindrome Permutation 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcode ...

  3. Codeforces 1076G Array Game 题解

    目录 题目大意 做法 代码 不想写昨天晚上cf的比赛题目所以来写题解摸摸鱼 题目大意 有一个在长度为\(k\)的正整数序列\(b\)上进行的游戏,一开始一个棋子放在位置\(1\),假如当前棋子的位置为 ...

  4. 第十九个知识点:Shamir密钥交换场景

    第十九个知识点:Shamir密钥交换场景 Shamir密钥交换场景是一个被Adi Shamir提出的算法.算法允许多方分割一个密码,例如一个密钥.当足够多的秘密结合起来,整个密钥就被计算出来了. 正式 ...

  5. CS229 机器学习课程复习材料-线性代数

    本文是斯坦福大学CS 229机器学习课程的基础材料,原始文件下载 原文作者:Zico Kolter,修改:Chuong Do, Tengyu Ma 翻译:黄海广 备注:请关注github的更新,线性代 ...

  6. CS5213替代AG6200 AG6201|HDMI转VGA带音频输出方案芯片

    台湾安格AG6200 AG6201专门用于设计HDMI转VGA带音频输出的方案芯片,CS5213是一款HDMI to VGA转换器且结合了HDMI输入接口和模拟RGB DAC输出.带支持片上音频数模转 ...

  7. 云南农职《JavaScript交互式网页设计》 综合机试试卷④——蔚蓝网导航栏

    一.语言和环境 实现语言:javascript.html.css. 开发环境:HBuilder. 二.题目(100分) 1.功能需求: 布局出顶部导航栏目 鼠标放到新手入门显示对象的下拉列表 鼠标移开 ...

  8. C#中的值传递与引用传递(in、out、ref)

    在C#中,方法.构造函数可以拥有参数,当调用方法或者构造函数时,需要提供参数,而参数的传递方式有两种(以方法为例): 值传递 值类型对象传递给方法时,传递的是值类型对象的副本而不是值类型对象本身.常用 ...

  9. MySQL支持IPv6

    开启和验证MySQL支持IPv6的方法, 此处使用的MySQL版本为mysql-5.5.35-linux2.6-x86_64. 1.验证操作系统支持IPv6,此处是Linux操作系统 ping6 :: ...

  10. centos6.5搭建LAMP

    实验前准备    (1)service iptables stop   #关闭防火墙       service iptables status   #查看防火墙是否已经关闭       iptabl ...