易网时代-编程资源站
Welcome
微信登录
编程资源
图片资源库
蚂蚁家优选
PDF转换器
软件资源
软件开发
、
小程序制作
、
系统集成与运维
、
空间租用
、
硬件开发
、
视频监控
、
技术咨询与支持
——联系电话:0311-88999002/88999003
首页
/
操作系统
/
Linux
/
Java 多线程卖票演示
Java 多线程卖票演示
class
Ticket
implements
Runnable
{
private
int
tick=
100
;
//
/*public void run()
{
while(tick>0)
{
try{Thread.sleep(10);}catch(Exception ex) {}
//当现在tick=1时,而所有线程都在这个地方停止了,那么这时就会出现 tick < 0 的情况 ,这就是多线程情况 的安全性问题
System.out.println(Thread.currentThread().getName()+"..."+tick--);
}
}*/
public
void
run()
{
while
(
true
)
//循环是指线程不停的去卖票
{
synchronized
(
this
)
//当操作的是共享数据时, 用同步代码块进行包围起来,这样在执行时,只能有一个线程执行同步代码块里面的内容
{
if
(tick>
0
)
{
//try{Thread.sleep(10);}catch(Exception ex) {}在同步代码块里面睡觉,给不睡效果是一样 的,作用只是自已不执行,也不让线程执行
System.out.println(Thread.currentThread().getName()+
"..."
+tick--);
}
else
break
;
}
try
{Thread.sleep(
100
);}
catch
(Exception ex) {}
//所以把睡觉放到同步代码块的外面,这样卖完一张票就睡一会,让其他线程再卖,这样所有的线程都可以卖票
}
}
}
public
class
Sale {
public
static
void
main(String[] args) {
Ticket ticket=
new
Ticket();
Thread t1=
new
Thread(ticket);
Thread t2=
new
Thread (ticket);
Thread t3=
new
Thread(ticket);
Thread t4=
new
Thread(ticket);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
/*
* 多线程出现的安全性问题:
* 在操作共享数据时,一条语句在没有执行完的情况下,另外一语句参与进行,就会再现错误
* 解决办法 :
* 在多条语句操作共享数据时, 在一个操作共享数据的语句没有执行时,不能让其他的线程进来
*
* Java中提供了同步代码块:
* synchronized(对象)
* {
* }
* 注意:
* 不要同步代码块里面睡觉,这样会造成自己不执行,也不让其他线程执行的后果
*
* 多线程 卖票: 创建多个线程,共同卖票
*
*
* */
2011
/
10
/
24
11
:
4
:
49
收藏该网址
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图