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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 不想飞不到 于 2014-9-12 16:05 编辑

视频的这个例子会报异常。

public class ThreadSopeShareData {
private static Map<Thread,Integer> map = new HashMap<Thread,Integer>();
private static int data = 0;
public static void main(String... args) {
for(int x=1;x<=2;x++){
new Thread(new Runnable(){
@Override
public void run() {
int data =new Random().nextInt();
map.put(Thread.currentThread(),data);
System.out.println(Thread.currentThread().getName()+"...."+data);
new A().get();
new B().get();
}
}).start();
}
}
static class A{
public void get(){
int data = map.get(Thread.currentThread());
System.out.println("A form "+Thread.currentThread().getName()
+"...get data :"+data);
}
}
static class B{
public void get(){
int data = map.get(Thread.currentThread());
System.out.println("B form "+Thread.currentThread().getName()
+"...get data :"+data);
}
}
}
里面用的HashMap是线程不安全的,导致试验中会出现丢失数据的情况,严重会报空指针异常,强烈建议改为HashTable或者对其采取同步措施。


5 个回复

倒序浏览
本帖最后由 fantacyleo 于 2014-9-12 01:14 编辑

这谁的视频啊?张老师的?我看了一下,似乎这里没有你说的线程安全问题,也不涉及空指针异常。你可以把出问题的运行结果帖出来么?
回复 使用道具 举报
fantacyleo 发表于 2014-9-12 00:38
这谁的视频啊?张老师的?我看了一下,似乎这里没有你说的线程安全问题,也不涉及空指针异常。你可以把出问 ...

空指针异常:
Thread-1++get data:-1322370346
Thread-0++get data:-2101630013
A classThread-0.......get data:-2101630013
Exception in thread "Thread-1" B classThread-0.......get data:-2101630013
java.lang.NullPointerException
        at cn.itcast.heima2.ThreadSopeShareDate$A.get(ThreadSopeShareDate.java:34)
        at cn.itcast.heima2.ThreadSopeShareDate$1.run(ThreadSopeShareDate.java:23)
        at java.lang.Thread.run(Thread.java:745)



回复 使用道具 举报
fantacyleo 发表于 2014-9-12 00:38
这谁的视频啊?张老师的?我看了一下,似乎这里没有你说的线程安全问题,也不涉及空指针异常。你可以把出问 ...

是张老师的线程库。
回复 使用道具 举报
不想飞不到 发表于 2014-9-12 16:03
空指针异常:
Thread-1++get data:-1322370346
Thread-0++get data:-2101630013

好吧。我仔细看一下。不过张老师的线程库视频确实问题不少。空中网3个面试题中有2个都有点问题
回复 使用道具 举报
fantacyleo 发表于 2014-9-12 17:06
好吧。我仔细看一下。不过张老师的线程库视频确实问题不少。空中网3个面试题中有2个都有点问题 ...

我换成HashTable就好了,啥问题没有,用MyEclipse跑的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马