A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

yinjiangzhb

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© yinjiangzhb 初级黑马   /  2014-8-30 23:39  /  1066 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

改代码是看张孝祥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)


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

4 个回复

倒序浏览
这代码看的有点晕,哪一讲?
回复 使用道具 举报
线程没同步,加个锁试试
回复 使用道具 举报
把每个线程和线程要访问的数据加到map里去的,然后再用map取出数据,,好像是在4,5节,具体那一节搞忘了,
回复 使用道具 举报
没学,暂时看不懂,回去补补
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马