演练代码如下:
//定义People类,作为信息输入与输出的来源
class People
{
private String name;
private String sex;
private boolean flag = false;
//定义一个同步的方法,可以给成员变量赋值
public synchronized void set(String name,String sex)
{
//判断标记,真就等待,假的跳过
if(flag)
try{this.wait();}catch(Exception e){}
//自动赋值
this.name = name;
this.sex = sex;
//修改标记值为真
flag = true;
//唤醒线程池中的其他线程
this.notify();
}
////定义一个同步的方法,可以输出成员变量的值
public synchronized void get()
{
//标记为假就等待,真就跳过此步
if(!flag)
try{this.wait();}catch(Exception e){System.out.println("中断异常或者非法监视器状态异常");}
//输出成员信息
System.out.println(Thread.currentThread().getName()+"..."+name+"........"+sex);
//标记置为假
flag = false;
//唤醒线程池中的其他线程
this.notify();
}
}
//定义一个输入信息的类
class Input implements Runnable
{
//创建一个对象
private People r ;
//通过构造函数给引用赋值
Input(People r)
{
this.r = r;
}
//复写run方法
public void run()
{
int x = 0;
while(true)
{
//通过判断X的值达到每次赋的值不一样的效果
if(x==0)
r.set("GG","男");
else
r.set("MM","女");
x = (x+1)%2;
}
}
}
class Output implements Runnable
{
////创建一个对象
private People r ;
//通过构造函数给引用赋值
Output(People r)
{
this.r = r;
}
//复写run方法
public void run()
{
while(true)
{
//调用输出方法输出结果
r.get();
}
}
}
public class Test
{
public static void main(String[] args)
{
//创建一个资源对象
People r = new People();
//开启两个线程
new Thread(new Input(r)).start();
new Thread(new Output(r),"我是输出线程").start();
}
}
通过此代码的演练可以知道如何通过多个线程操作同一个资源并使其操作的动作按照要求执行。
|
|