多线程编程<三>
1 /**
2 * 线程的暂停、恢复和停止
3 * @author Administrator
4 *
5 */
6 public class ThreadControlDemo {
7 public static void main(String[] args) {
8 MyThread mt = new MyThread("MyThread");
9
10 try {
11 Thread.sleep(3000);
12 System.out.println("\nSuspending MyThread.");
13 mt.mySuspend();
14 Thread.sleep(3000);
15
16 System.out.println("\nResuming MyThread.");
17 mt.myResume();
18 Thread.sleep(3000);
19
20 System.out.println("\nSuspending MyThread again.");
21 mt.mySuspend();
22 Thread.sleep(3000);
23
24 System.out.println("\nResuming MyThread again.");
25 mt.myResume();
26 Thread.sleep(3000);
27
28 System.out.println("\nStopping MyThread.");
29 mt.myStop();
30
31 } catch (InterruptedException e) {
32 System.out.println("Main thread Interrupted");
33 }
34 }
35 }
36
37 class MyThread implements Runnable {
38 Thread thrd;
39 private volatile boolean suspended;//暂停
40 private volatile boolean stopped;
41
42 MyThread(String name){
43 thrd = new Thread(this, name);
44 suspended = false;
45 stopped = false;
46 thrd.start();
47 }
48 @Override
49 public void run() {
50 System.out.println(thrd.getName() + " starting.");
51 try {
52 for (int i = 0; i < 1000; i++) {
53 if (stopped) {
54 System.out.println("Stopping begin.(1):");
55 }
56 System.out.print(".");
57 Thread.sleep(300);
58 if (stopped) {
59 System.out.println("Stopping begin.(2):");
60 }
61 synchronized (this) {
62 while(suspended) wait();
63
64 //如果thread要停止,跳出循环,线程结束。
65 if (stopped) {
66 break;
67 }
68 }
69 }
70 } catch (InterruptedException e) {
71 System.out.println(thrd.getName() + " interrupted.");
72 }
73 System.out.println("\n" + thrd.getName() + " exiting.");
74 }
75
76 //调用方法停止线程
77 synchronized void myStop() {
78 stopped = true;
79
80 suspended = false;
81 notify();
82 }
83
84 //暂停线程
85 synchronized void mySuspend() {
86 suspended = true;
87 }
88
89 //恢复线程
90 synchronized void myResume(){
91 suspended = false;
92 notify();
93 }
94 }
结果:
MyThread starting.
..........
Suspending MyThread.
Resuming MyThread.
...........
Suspending MyThread again.
Resuming MyThread again.
...........
Stopping MyThread.
Stopping begin.(2):
MyThread exiting.
多线程编程<三>的更多相关文章
- [置顶]
曙光到来,我的新书《Android进阶之光》已出版
独立博客版本请点击这里 由来 2016年我开始建立了自己的知识体系,所有的文章都是围绕着这个体系来写,随着这个体系的慢慢成长,开始有很多出版社联系我写书,因为比较看好电子工业出版社,就顺理成章的开始了 ...
- 《Android进阶之光》--注解与依赖注入框架
No1: 标准注解: 1)@Override:覆写 2)@Deprecated:过时 3)@SuppressWarnings:取消警告 4)@SafeVarargs:申明使用了可变长度参数的方法 No ...
- 《Android进阶之光》--Material Design
接上篇<Android进阶之光>--Android新特性 No1: 组件: 1)底部工作条-Bottom Sheets 2)卡片-Cards 3)提示框-Dialogs 4)菜单-Menu ...
- Android中的多线程编程(一)附源代码
Android中多线程编程:Handler类.Runnable类.Thread类之概念分析 1.Handler类: Handler是谷歌封装的一种机制:能够用来更新UI以及消息的发送和处理.Handl ...
- 《Android进阶之光》--多线程编程
No1: 实现多线程的3中方法 1)继承Thread,重写run()方法 2)实现Runnable接口,并实现该接口的run()方法 3)实现Callable接口,重写call()方法 public ...
- 《Android进阶之光》--网络编程与网络框架
No1: Volley源码分析: Volley.newRequestQueue-> RequestQueue.start()-> CacheDispatcher.start()->C ...
- Android进阶(九)APP编程感想
从初识Android到现在,在不断做APP(二维码.条形码扫描,彩票购买,火车票余票查询)的过程中,自己学会了很多东西.找时间整理了一下,总结如下: 其中,对于前两个APP,自己都是在他人已完成的基础 ...
- Android中的多线程编程
问题 Android的UI也是线程不安全的,如果要更新应用程序里的UI元素,必须在主线程中进行,否则就会抛异常.比如用一个Button的onClick函数去更新界面上的元素,就会得到一个CalledF ...
- 《Android进阶之光》--Android新特性
Android 5.0新特性 1)全新的Material Design设计风格 2)支持多种设备 3)全新的通知中心设计--按照优先级显示 4)支持64位ART虚拟机 5)多任务视窗Overview ...
- Android进阶之光-第1章-Android新特性-读书笔记
第 1 章 Android 新特性 1.1 Android 5.0 新特性 1.1.1 Android 5.0 主要新特性 1. 全新的 Material Design 新风格 Material De ...
随机推荐
- Leetcode:面试题68 - II. 二叉树的最近公共祖先
Leetcode:面试题68 - II. 二叉树的最近公共祖先 Leetcode:面试题68 - II. 二叉树的最近公共祖先 Talk is cheap . Show me the code . / ...
- Lniux上的tomcat部署web项目路径问题
一.项目路径及部署.启动位置 1.在tomcat下部署应用,部署路径:一般直接部署在tomcat/webapps/ROOT下即可.2.默认访问路径:tomcat的默认访问路径为webapps/ROOT ...
- 数据库-SQL 语法
数据库-SQL 语法 二十余年如一梦,此身虽在堪惊. 简介:数据库-SQL 语法 一.基础 模式定义了数据如何存储.存储什么样的数据以及数据如何分解等信息,数据库和表都有模式. 主键的值不允许修改,也 ...
- OpenFaaS实战之七:java11模板解析
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 【NLP学习其四】如何构建自己用于训练的数据集?什么是词性标注?
数据集与词性标注 数据集是NLP中的重要一环. 但是提到数据集,很多人的第一个想法可能是:"这玩意从网上下载就好了,不用管". 真的不用管?最开始我也是这么认为的 于是我直奔CoN ...
- 根据JavaScript中原生的XMLHttpRequest实现jQuery的Ajax
基本介绍 XmlHttpRequest XmlHttpRequest是JavaScript中原生的,历史悠久的一种发送网络请求的方案. 基本上所有前端框架对于网络请求的部分都是基于它来完成的. 在本章 ...
- 37岁Android程序员裸辞,四个月被497家公司拒绝,问猎头后懵了
一位网友在职场论坛上发了一个帖子,他说自己今年三十七岁了,是一名Android老兵,因为和上家公司的领导闹矛盾有了嫌隙,一气之下就裸辞了,如今已经辞职四个月了,也失业了四个月. 每天都在努力投简历,共 ...
- netty系列之:文本聊天室
目录 简介 聊天室的工作流程 文本处理器 初始化ChannelHandler 真正的消息处理逻辑 总结 简介 经过之前的系列文章,我们已经知道了netty的运行原理,还介绍了基本的netty服务搭建流 ...
- 如何在idea中配置Tomcat服务器
.IDEA 中动态 web 工程的操作 a)IDEA 中如何创建动态 web 工程 1.创建一个新模块: 2.选择你要创建什么类型的模块 3.输入你的模块名,点击[Fin ...
- Java8新特性(三)之方法引用和构造器引用
1.使用场景 当要传递给Lambda体的操作,已经存在实现的方法了,就可以使用方法引用.(抽象方法的参数列表 必须与方法引用方法的参数列表保持一致) 2. 语法 使用操作符[::]将方法名和对象或类 ...