黑马程序员技术交流社区

标题: 张孝祥java并发视频 一个小问题 [打印本页]

作者: yinjiangzhb    时间: 2014-8-30 23:39
标题: 张孝祥java并发视频 一个小问题
改代码是看张孝祥java并发视频发现的一个问题,该代码是仿照视频敲的代码,但和视频最终源码有点小区别:
package Test;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class ThreadScopShare {

        /**
         * @param args
         */
        private static int data=0;
        private static Map<Thread,Integer> threadData=new HashMap();
        public static void main(String[] args) {
                for(int i=0;i<2;i++){
                new Thread(new Runnable(){
                        @Override
                        public void run() {
                                data=new Random().nextInt();   //视频最终源码改正后为: int data=new Random().nextInt();
                                System.out.println(Thread.currentThread().getName()+
                                                "  put data:"+data);
                                threadData.put(Thread.currentThread(), data);
                                new A().get();   //报错行
                                new B().get();
                        }
                }).start();

        }
        }
static class A{
       
        public void get(){//报错行
                int data=threadData.get(Thread.currentThread());
                System.out.println("A from:"+Thread.currentThread().getName()+
                                "  get data:"+data);
        }
}
static class B{
        public void get(){
                int data=threadData.get(Thread.currentThread());
                System.out.println("B from :"+Thread.currentThread().getName()+
                                "  get data:"+data);
        }
       
}
}

该程序运行结果有时候报空指针异常,,
Thread-0  put data:1298776584
A from:Thread-0  get data:1298776584
Exception in thread "Thread-1" java.lang.NullPointerException
B from :Thread-0  get data:1298776584
        at Test.ThreadScopShare$A.get(ThreadScopShare.java:33)
        at Test.ThreadScopShare$1.run(ThreadScopShare.java:23)
        at java.lang.Thread.run(Thread.java:745)


不明白,,为什么会空指针异常,望解释一下,

作者: yjiang_09    时间: 2014-8-31 01:39
这代码看的有点晕,哪一讲?
作者: WakeUp    时间: 2014-8-31 03:55
线程没同步,加个锁试试
作者: yinjiangzhb    时间: 2014-8-31 20:48
把每个线程和线程要访问的数据加到map里去的,然后再用map取出数据,,好像是在4,5节,具体那一节搞忘了,

作者: 天邃任我桓    时间: 2014-8-31 23:03
没学,暂时看不懂,回去补补




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