zoukankan
html css js c++ java
Java多线程-一个简单的线程,实现挂起和恢复的功能
主程式代码:
public
class
MainApp
{
public
static
void
main(String[] args)
{
try
{
MySprite dog
=
new
MySprite(
"
狗狗
"
);
MySprite cat
=
new
MySprite(
"
喵喵
"
);
MySprite pig
=
new
MySprite(
"
猪猪
"
);
System.out.println(
"
--- start sprites
"
);
dog.start();
cat.start();
pig.start();
Thread.sleep(
500
);
System.out.println(
"
--- suspend dog
"
);
dog.suspend();
System.out.println(
"
--- main thread do something
"
);
Thread.sleep(
500
);
System.out.println(
"
--- resume dog
"
);
dog.resume();
Thread.sleep(
500
);
System.out.println(
"
--- end dog
"
);
dog.stop();
System.out.println(
"
--- main thread do something
"
);
Thread.sleep(
500
);
System.out.println(
"
--- end other sprites
"
);
cat.stop();
pig.stop();
Thread.sleep(
100
);
System.out.println(
"
--- exit programe.
"
);
}
catch
(InterruptedException e)
{
e.printStackTrace();
}
}
}
线程实现
public
class
MySprite
implements
Runnable
{
/**/
/*
* 线程用变量
*/
private
boolean
running
=
false
;
private
boolean
waiting
=
false
;
private
Thread thread;
/**/
/*
* Business 变量
*/
private
String name;
public
MySprite(String name)
{
this
.name
=
name;
this
.thread
=
new
Thread(
this
);
}
/** */
/**
* 启动线程
*/
public
void
start()
{
running
=
true
;
thread.start();
}
/** */
/**
* 挂起线程
*/
public
void
suspend()
{
if
(waiting)
{
//
是挂起状态则直接返回
return
;
}
synchronized
(
this
)
{
this
.waiting
=
true
;
}
}
/** */
/**
* 恢复线程
*/
public
void
resume()
{
if
(
!
waiting)
{
//
没有挂起则直接返回
return
;
}
synchronized
(
this
)
{
this
.waiting
=
false
;
this
.notifyAll();
}
}
/** */
/**
* 停止线程
*/
public
void
stop()
{
if
(
!
running)
{
//
没有运行则直接返回
return
;
}
synchronized
(
this
)
{
running
=
false
;
}
}
public
void
run()
{
for
(;;)
{
try
{
//
线程挂起和退出处理
synchronized
(
this
)
{
if
(
!
running)
{
break
;
}
if
(waiting)
{
this
.wait();
}
}
//
应该做的事情
cry();
//
进入等待状态
Thread.sleep(
50
);
}
catch
(InterruptedException e)
{
e.printStackTrace();
}
}
}
private
void
cry()
{
System.out.println(name
+
"
:woo!
"
);
}
}
查看全文
相关阅读:
通过pwndbg看看c中局部变量是如何在stack上放置的 此外 printf %n的作用终于弄明白了
pip 安装过慢 使用清华源 加速
mac 10.15.6 安装 IDA
使用机器学习检测命令行混淆
安全技能树简版
栈溢出 hack 入门例子 hello world
201116西瓜书机器学习系列---8、集成学习
legend2---某些js代码电脑浏览器支持,手机浏览器不支持的调试
legend2---做题页的每个题目对应的答案重点标颜色
legend2---jquery重新渲染某元素
原文地址:https://www.cnblogs.com/hcfalan/p/1222960.html
最新文章
delphi中如何实现文件的复制?
Delphi 跨单元进入(访问)类的私有成员,protected ,private部分
rtti读取和设置属性
Delphi 遍历类中的属性
delphi开发实例:保存字体设置的方法
delphi 中判断对象是否具备某一属性
delphi如何按照控件的左右顺序来遍历窗体中的每个控件 [问题点数:20 http://bbs.csdn.net/topics/380216822
linux shell实现守护进程 看门狗 脚本
linux添加service服务,设置自启
[Linux]服务管理:service、systemctl、chkconfig
热门文章
详解Linux 服务管理两种方式service和systemctl
linux 将自己的服务添加到系统service服务
CMake----if与option使用小记
CMake option选项开关
Socket缓冲区大小修改与系统设置
shell 将变量当命令执行问题【多条命令同时执行问题】
将make的输出重定向到文件
恶意c2家族反汇编
计算机原理系列之八 ——– 可执行文件的PLT和GOT 帮助你深刻理解libc库函数调用的细节(动态库)
Mac 环境下 PWN入门系列(二)——leave 指令 leave 指令等于 mov esp,ebp和 pop ebp 两条指令的组合
Copyright © 2011-2022 走看看