多线程编程<三>
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 ...
随机推荐
- 基于JSP的学生考勤管理系统(MySQL版)
介绍:基于JSP的学生考勤管理系统(MySQL版)1.包含源程序,数据库脚本.代码和数据库脚本都有详细注释.2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善.开发环境:Eclipse ,MyS ...
- 使用deepin连接罗技k380
1,刚开始总是连不上,连上了就断开了,以为是deepin系统的问题. 2,首先在华为论坛上找到这样的一片解决方案:https://cn.ui.vmall.com/thread-21831568-1-1 ...
- deepin解压乱码
使用unzip命令解压:unzip -O GBK xxxx.zip -d xxx
- 正则表达式的模式匹配----V客学院技术分享
正则表达式是由一个字符序列形成的搜索模式. 你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容. 正则表达式可以是一个简单的字符,或一个更复杂的模式. 正则表达式可用于所有文本搜索和文本替换的 ...
- 关于hashcode和equals方法说明
一.前言 我们都知道,要比较两个对象是否相等时需要调用对象的equals()方法,即判断对象引用所指向的对象地址是否相等,对象地址相等时,那么与对象相关的对象句柄.对象头.对象实例数据.对象类型数据等 ...
- 运行ride.py报错,闪退
报错信息如下: F:\Python3.8\Scripts>python ride.py<class 'robotide.preferences.configobj.UnreprError' ...
- 开发工具IDE从入门到爱不释手(一)项目初始配置
前言 版本:IDE 2019.2.3 JDK:1.8 一.字体 快捷键:Ctrl+Alt+S ;打开Settings,一般系统配置都在这里 输入font,需要修改字体有三处 Apperance:ID ...
- HTML5(五)——Canvas API
什么是 Canvas API? Canvas API(画布)提供了一个通过 javascript 和 html 的 canvas 元素来在网页上实时绘制图形的方式.可用于动画.游戏.图标.图片编辑等多 ...
- WanJetpack项目:用Jetpack实现玩Android,追求最官方的实现方式
项目简介 玩Android demo.用Jetpack MVVM开发架构.单Activity多Fragment项目设计,项目结构清晰,代码简洁优雅,追求最官方的实现方式.用到以下知识点: LiveDa ...
- vue菜单切换
HTML: <div id="box"> <ul> <li v-for= "(item,index) in arry"> & ...