/*
线程间通讯:
其实就是多个线程在操作同一个资源,
但是操作的动作不同。
需求:一个线程负责输入姓名和年龄,另一个线程负责输出这个姓名和年龄。
加锁了,多线程还不安全就要考虑两个前提是否满足。
1、多线程。
2、同一个锁。
*/
class Resource
{
String name;
String sex;
}
class Input implements Runnable
{
private Resource r;
Input(Resource r)
{
this.r = r;
}
public void run()
{
int x=0;
while(true)
{
synchronized(r)//两个线程,加同一个锁
{
if(x==0)
{
r.name="mike";
r.sex="man";
}
else
{
r.name="丽丽";
r.sex="女女女女女";
}
x=(x+1)%2;
}
}
}
}
class Output implements Runnable
{
private Resource r;
Output(Resource r)
{
this.r = r;
}
public void run()
{
while(true)
synchronized(r)//两个线程,加同一个锁
{
System.out.println(r.name+"..."+r.sex);
}
}
}
class InputOutputDemo
{
public static void main(String[] args)
{
Resource r = new Resource();
Input in = new Input(r);
Output out = new Output(r);
Thread t1 = new Thread(in);
Thread t2 = new Thread(out);
t1.start();
t2.start();
}
}
/*
E:\javademo\day12>java InputOutputDemo
mike...man
mike...man
mike...man
mike...man
mike...man
mike...man
mike...man
mike...man
mike...man
mike...man
mike...man
mike...man
mike...man
mike...man
mike...man
mike...man
mike...man
mike...man
丽丽...女女女女女
丽丽...女女女女女
丽丽...女女女女女
丽丽...女女女女女
*/
day12/InputOutputDemo.java
最新推荐文章于 2022-01-30 10:37:52 发布