黑马程序员技术交流社区
标题:
想问下关于类成员Boolean默认值的问题
[打印本页]
作者:
play1369
时间:
2014-11-27 17:22
标题:
想问下关于类成员Boolean默认值的问题
/*
生产者-消费者模式练习
用同步机制解决生产和消费信息不统一的问题
用等待与唤醒机制实现生产一个消费一个
*/
class PmakeCus
{
public static void main(String[] args)
{
Resouse r = new Resouse();//产品
Make m = new Make(r);//生产者
Customer c = new Customer(r);//消费者
new Thread(m,"生产线程1").start();//线程
new Thread(m,"生产线程2").start();
new Thread(m,"生产线程3").start();
new Thread(m,"生产线程4").start();
new Thread(c,"消费线程1").start();
new Thread(c,"消费线程2").start();
new Thread(c,"消费线程3").start();
new Thread(c,"消费线程4").start();
}
}
//产品类
class Resouse
{
private String pname;//产品名称
private int pcount = 1;//产品标识
private Boolean flag ;//等待判断标识 = false;
//生产产品
public synchronized void pset(String pname)//同步生产
{
while(flag)//已生产产品
{
try
{
this.wait();
}
catch (Exception e)
{
e.printStackTrace();
}
}
this.pname=pname+"--"+pcount++;
System.out.println(Thread.currentThread().getName()+"--生产者--"+this.pname);
flag = true;//重新设置等待标识
this.notifyAll();//唤醒所有
}
//消费产品
public synchronized void pget()//同步取出
{
while(!flag)//已取出产品
{
try
{
this.wait();
}
catch (Exception e)
{
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"..消费者.."+this.pname);
flag = false;//重新设置等待标识
this.notifyAll();//唤醒所有
}
}
//生产类
class Make implements Runnable
{
private Resouse r;
Boolean f = true;
Make(Resouse r)
{
this.r=r;//接受同一产品资源
}
public void run()
{
while(true)
{
if(f)
{
r.pset("终结者I型");//生产不同产品
f=false;
}
else
{
r.pset("终结者II型");//生产不同产品
f=true;
}
}
}
}
//消费类
class Customer implements Runnable
{
private Resouse r;
Customer(Resouse r)
{
this.r=r;//接受同一产品资源
}
public void run()
{
while(true)
{
r.pget();//取出产品
}
}
}
复制代码
Boolean flag必须附上初始值private Boolean flag = false,否则运行报空指针,为什么呢?
我记得类成员Booleand的默认值是false
类成员的话,private Boolean flag = false;和
private Boolean flag;会有不同吗?
作者:
kerner
时间:
2014-11-27 17:39
Boolean不是8种基本类型,它是boolean的包装类,是类类型。默认初始化是null,使用之前必须引用一个对象,所以会发送空指针异常。
Boolean falg = false;编译器帮你自动装箱,相当于 Boolean flag = new Boolean(false);
作者:
play1369
时间:
2014-11-27 17:47
kerner 发表于 2014-11-27 17:39
Boolean不是8种基本类型,它是boolean的包装类,是类类型。默认初始化是null,使用之前必须引用一个对象, ...
谢谢啊,原来写成了包装类了
作者:
ppStudent
时间:
2014-11-27 22:57
我就说感觉不对,基本数据类型boolean这样才对啊,,,,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2