黑马程序员技术交流社区

标题: 多线程 [打印本页]

作者: 杨立考    时间: 2012-10-10 23:05
标题: 多线程
帮忙看下  下面标红的是命令行里面提示的问题描述,怎么解决啊?
class Demo2
{
public static void main(String[] args)
{
  ZiYuan zy=new ZiYuan();
  XiaoFei xf=new XiaoFei(zy);
  ShengChan sc=new ShengChan(zy);
  Thread th1=new Thread(xf);
  Thread th2=new Thread(sc);
  th1.start();
  th2.start();

}
}
class ZiYuan
{
private String name;
private int Num1=1;
private int Num2=2;
private boolean flag;
public synchronized void XF(String name)
  {
   if(flag)
    {
     try{this.wait();}catch(InterruptedException e){}
    }
    this.name=name;
    System.out.println(Thread.currentThread().getName()+"生产产品"+this.name+(Num1++));
    flag=true;
    this.notify();
  }
public synchronized void SC(String name)
  {
   if(!flag)
    {
     try{this.wait();}catch(InterruptedException e){}
    }
   
    System.out.println(Thread.currentThread().getName()+"消费产品"+this.name+(Num2++));
   
    flag=false;
    this.notify();
  }
}
class XiaoFei implements Runnable
{
private ZiYuan r;
public XiaoFei(ZiYuan r)
  {
   this.r=r;
  }
public void run()
  {
   while (true)
   {
    r.XF("馒头");
   }
  }
}
class ShengChan implements Runnable
{
private ZiYuan r;
public ShengChan(ZiYuan r)
  {
   this.r=r;
  }
public void run()
  {
   while (true)
   {
    r.SC();//提示无法将ZiYuan 中的 SC<java.lang.String>应用于<>   r.SC();
   }
  }
}


作者: 沈佳龙    时间: 2012-10-10 23:22
r.SC();改成r.sc(“馒头")  你调用这个方法的时候,这个方法要传入参数的······
作者: 杨立考    时间: 2012-10-10 23:46
沈佳龙 发表于 2012-10-10 23:22
r.SC();改成r.sc(“馒头")  你调用这个方法的时候,这个方法要传入参数的······ ...

不行 那里不可以传参  命令行里运行会出现问题
作者: 王虎    时间: 2012-10-11 00:12
public synchronized void SC(String name)
这是你定义的方法,定义函数需要考虑两个方面:1.参数  2.返回值     你在这个方法里定义了形参即(String name)
当其他对象在调用时比如  你所说的r.SC()  里面就要传入一个实参 ,比如r.SC("你好,考拉兄") ,此时 这个实参只要是字符串类编译通过,控制台就不会报上述红色标记的错误





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2