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!
"
);
}
}
查看全文
相关阅读:
洛谷P3796 【模板】AC自动机(加强版)(AC自动机)
洛谷P3203 [HNOI2010]弹飞绵羊(LCT,Splay)
洛谷P1501 [国家集训队]Tree II(LCT,Splay)
LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)
[BZOJ3172][TJOI2013]单词 AC自动机
[BZOJ1968][AHOI2005]COMMON约数研究 数学
[BZOJ1053][SDOI2005]反素数ant 数学
[BZOJ1045][HAOI2008]糖果传递 数学
[BZOJ2733][HNOI2012]永无乡 线段树合并
[BZOJ1005][HNOI2008]明明的烦恼 数学+prufer序列+高精度
原文地址:https://www.cnblogs.com/hcfalan/p/1222960.html
最新文章
洛谷P2542 [AHOI2005]航线规划(LCT,双连通分量,并查集)
洛谷P3950 部落冲突(LCT)
洛谷SP16580 QTREE7
洛谷SP16549 QTREE6
洛谷P4299 首都(BZOJ3510)(LCT,树的重心,二分查找)
洛谷P4172 [WC2006]水管局长 (LCT,最小生成树)
洛谷P4234 最小差值生成树(LCT,生成树)
洛谷P3703 [SDOI2017]树点涂色(LCT,dfn序,线段树,倍增LCA)
洛谷P3434 [POI2006]KRA-The Disks(线段树)
洛谷P3459 [POI2007]MEG-Megalopolis(树链剖分,Splay)
热门文章
洛谷P2387 [NOI2014]魔法森林(LCT)
数列分块总结——题目总版(hzwer分块九题及其他题目)(分块)
manacher模板(manacher)
洛谷P4180 [BJWC2010]次小生成树(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)
洛谷U19482 山村游历(Wander)(LCT)
洛谷P4219 [BJOI2014]大融合(LCT)
洛谷P3402 【模板】可持久化并查集(可持久化线段树,线段树,并查集)
洛谷P2444 [POI2000]病毒(AC自动机,DFS求环)
A Dream (PKUWC 2018)
Emacs配置(考场必备)(Emacs)
Copyright © 2011-2022 走看看