易网时代-编程资源站
Welcome
微信登录
编程资源
图片资源库
蚂蚁家优选
PDF转换器
软件资源
软件开发
、
小程序制作
、
系统集成与运维
、
空间租用
、
硬件开发
、
视频监控
、
技术咨询与支持
——联系电话:0311-88999002/88999003
首页
/
操作系统
/
Linux
/
Java 多线性读者写者问题
Java 多线性读者写者问题
package
namespace;
class
Man
{
String name;
String sex;
boolean
flag=
false
;
// 定义一个开关变量,用来进行读或写的操作
}
class
Input
implements
Runnable
{
private
Man man;
private
static
int
num=
1
;
//用于控制两次写进去的值不一样
public
Input(Man m)
{
this
.man=m;
}
public
void
run()
{
while
(
true
)
{
synchronized
(man) {
if
(man.flag)
//如果flag=true的话,就代表已经写进去值了,所以就要等待
try
{ man.wait();}
catch
(Exception e) {}
if
(num==
1
)
//等待被唤醒之后,下面就要对其进行写的操作了
{
man.name=
"mike"
;
man.sex=
"男"
;
}
else
{
man.name=
"Lily"
;
man.sex=
"女"
;
}
//上面是已经执行完写的动作
man.flag=
true
;
//写完之后,要把flag设置成true ,这代表已经写完,等被读,如果再执行写操作的话,上面flag=true ,就开始了等待了
num=(num+
1
)%
2
;
man.notify();
//
}
}
}
}
class
Output
implements
Runnable
{
private
Man man;
public
Output(Man m)
{
this
.man=m;
}
public
void
run()
{
while
(
true
)
{
synchronized
(man)
{
if
(!man.flag)
try
{ man.wait();}
catch
(Exception e) {}
System.out.println(man.name+
"...."
+man.sex);
man.flag=
false
;
man.notify();
}
}
}
}
public
class
Study
{
public
static
void
main(String args[])
{
Man man=
new
Man();
Thread t1=
new
Thread(
new
Input(man));
Thread t2=
new
Thread(
new
Output(man));
t1.start();
t2.start();
}
}
/*
* 多线程读者写者问题
* 线程之间的通信一般都是一段共享数据的操作来进行通信的
*
* 里面的两个线程就是一个读一个写,然而这两个操作是通过两个线程同时进行的.因此如果线程不同步,将会出现安全性问题
* 所谓的安全性问题就是线和写和线和读的结果不一样,出就是读出来的值并不是写进行的那样,这样就出来了安全性问题
*问题的解决:
* 出现这种同时操作一个对象的问题,就是把它们操作那个对象的代码进行同步
* 读者与写者的问题要考虑到两个方面:
* 1. 读和写的两个线程要同步
* 2. 读和写要写进去一个就读一个
*
*
*
* */
/* 2011/10/23 21:22:20
* */
收藏该网址
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图