Gate类
package com.ccit;public class Gate {
private int count=0;
private String name;
private String address;
public void pass(String name,String address){
count++;
this.name=name;
this.address=address;
} public void check(String name,String address){
count++;
char[] c1=name.toCharArray();
char[] c2=name.toCharArray();
if(c1[0]==c2[0]){
System.out.print("回家了");
}else{
System.out.print("你走错家门了");
}
}}EnterThread类
package com.ccit;public class EnterThread extends Thread {
private Gate gate;
private String myname;
private String myaddress;
public EnterThread(){
}
public EnterThread(String myname,String myaddress){
this.myname=myname;
this.myaddress=myaddress;
}
public synchronized void run(){
while(true){
gate.check(myname, myaddress);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}测试类
package com.ccit;public class Test {
public static void main(String[] args) {
EnterThread e1=new EnterThread("lxb","lxbjia");
EnterThread e2=new EnterThread("syj","syjjia");
e1.start();
e2.start();
}}
结果总是空指针异常 怎么回事啊 谢谢了
package com.ccit;public class Gate {
private int count=0;
private String name;
private String address;
public void pass(String name,String address){
count++;
this.name=name;
this.address=address;
} public void check(String name,String address){
count++;
char[] c1=name.toCharArray();
char[] c2=name.toCharArray();
if(c1[0]==c2[0]){
System.out.print("回家了");
}else{
System.out.print("你走错家门了");
}
}}EnterThread类
package com.ccit;public class EnterThread extends Thread {
private Gate gate;
private String myname;
private String myaddress;
public EnterThread(){
}
public EnterThread(String myname,String myaddress){
this.myname=myname;
this.myaddress=myaddress;
}
public synchronized void run(){
while(true){
gate.check(myname, myaddress);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}测试类
package com.ccit;public class Test {
public static void main(String[] args) {
EnterThread e1=new EnterThread("lxb","lxbjia");
EnterThread e2=new EnterThread("syj","syjjia");
e1.start();
e2.start();
}}
结果总是空指针异常 怎么回事啊 谢谢了
解决方案 »
- Linux下用的JDialog对话框为什么会出现在任务栏中?
- 菜鸟求教
- 在java 中如何将 2007-04-25 16:55:29.0 变成 2007-04-25 16:55:29,请教大虾
- 怎样计算出与当前给出日期后面的最近的星期六?
- 50分 求人解决此问题 知道JAVA3D 和JMF的人 麻烦进来看下
- 高手帮我看看这段程序有何为题??
- FileDialog 文件对话框的问题
- 怎么样获取bmp文件的高度和宽度???急急急!!!!
- 有关字符编码格式转换的问题?望不吝赐教。
- 一个JAVA题,编译不过去,请高手看看,我想是环境变量的问题,请答复!
- 怎么把数据源从Spring配置文件移动到properties文件就不行了?
- Java初学者,请教各位大侠。。。。
和Gate gate=new Gate();有什么区别啊
我是新手,搞不清,谢谢指教
还有这题本意是不加synchronized 这个关键字 能输出 走错家门的信息 可现在不加都能真确回家,是怎么回事啊?
谢谢指教了
这个怎么解释啊
char[] c1=name.toCharArray();
char[] c2=address.toCharArray();
别的错误在哪啊
char[] c2 = address.toCharArray();吧
你那么写的话必然是一样的 - -
这个你没有具体说明指向那,只是给它声明了一下
package thread;public class ProducerAndCustomerDemo {
public static void main(String[] args) {
Queue q=new Queue();
Productor p=new Productor(q);
Customer c=new Customer(q);
p.start();
c.start();
}
}
class Customer extends Thread{
Queue q;
public Customer(Queue q) {
// TODO Auto-generated constructor stub
this.q=q;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (q.value<10) {
System.out.println("Customer get "+q.get());
}
}
}
class Productor extends Thread{
Queue q;
public Productor(Queue q) {
// TODO Auto-generated constructor stub
this.q=q;
}
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 1; i <=10; i++) {
q.put(i);
System.out.println("Productor put "+i);
}
}
}
class Queue{
int value;
boolean bFull=false;
public synchronized void put(int i){
if (!bFull) {
value=i;
bFull=true;
//notify();
notifyAll();
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public synchronized int get(){
if (!bFull) {
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
bFull=false;
notifyAll();
return value;
}
}
private Gate gate;声明了一个对象并没有去实例化,本身就是null。所以报空
char[] c2=address.toCharArray();A把自己的信息输入进去了,还没有执行if(c1[0]==c2[0]){这个时候B跑过来把name 改成了自己的名字,而地址还是A家的,这不就走错了家门吗??加锁的情况就是 A在做检查的时候B是不可以检查的,这样就不会有问题了
char[] c2 = address.toCharArray();