黑马程序员技术交流社区
标题:
多线程的问题
[打印本页]
作者:
396460221
时间:
2015-4-16 14:09
标题:
多线程的问题
多线程的问题,给一个资源命名和年龄,另一边取出来,想法取出资源的名字和年龄 ,从1到10000,总共取出10000个。
但为什么不是从1开始取出的,而是从4000多以后直到最后1000. 请高手帮忙看哪里不对
package lianxi2.WaitNotify2;
public class WaitNotify
{
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();
}
}
class Resource//定义资源
{
private String name;
private String sex;
private boolean flag;
private int count=1;
public synchronized void set(String name,String sex)//同步函数的锁是this
{
if(flag)
try{wait();}catch(Exception e){}//判断标记,如果为真,线程等待,给对象属性赋值
this.name=name;
this.sex=sex;
flag=true; //改变标记,防止赋值线程再次赋值即防止对一对象赋值两次
notify();//唤醒另一线程
}
public synchronized void out()//同步函数的锁是this
{
if(!flag)
try{wait();}catch(Exception e){}//判断标记,如果为真,线程等待
System.out.println(name+"--"+sex+" 数量为 "+count++);//输出对象属性
flag=false; //改变标记,防止输出线程再次输出即防止对一对象输出两次
notify();//唤醒另一线程
}
}
class Input implements Runnable//定义输入
{
private Resource r;
Input(Resource r)
{
this.r=r;
}
public void run()//覆盖Runnable接口中的run()方法,线程需要运行的代码
{
int y=0;//计数器改变赋值对象
for(int x=0;x<10000;x++)//while(true)无限循环
{
if(y%2==0)
{
r.set("张三","男");
}
else
{
r.set("lucy","女女女女女女");
}
//r.count++;
y++;
//r.flag=true;
//r.notify();
}
System.out.println(y);
}
}
class Output implements Runnable//定义输出
{
private Resource r;
Output(Resource r)
{
this.r=r;
}
public void run()//覆盖Runnable接口中的run()方法,线程需要运行的代码
{
for(int x=0;x<10000;x++)//while(true)无限循环
{
r.out();
//r.flag=false;
//r.notify();
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2