黑马程序员技术交流社区

标题: 关于线程范围内数据共享的例子是不是有问题? [打印本页]

作者: 不想飞不到    时间: 2014-9-12 00:23
标题: 关于线程范围内数据共享的例子是不是有问题?
本帖最后由 不想飞不到 于 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或者对其采取同步措施。



作者: fantacyleo    时间: 2014-9-12 00:38
本帖最后由 fantacyleo 于 2014-9-12 01:14 编辑

这谁的视频啊?张老师的?我看了一下,似乎这里没有你说的线程安全问题,也不涉及空指针异常。你可以把出问题的运行结果帖出来么?
作者: 不想飞不到    时间: 2014-9-12 16:03
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)




作者: 不想飞不到    时间: 2014-9-12 16:06
fantacyleo 发表于 2014-9-12 00:38
这谁的视频啊?张老师的?我看了一下,似乎这里没有你说的线程安全问题,也不涉及空指针异常。你可以把出问 ...

是张老师的线程库。
作者: fantacyleo    时间: 2014-9-12 17:06
不想飞不到 发表于 2014-9-12 16:03
空指针异常:
Thread-1++get data:-1322370346
Thread-0++get data:-2101630013

好吧。我仔细看一下。不过张老师的线程库视频确实问题不少。空中网3个面试题中有2个都有点问题
作者: 不想飞不到    时间: 2014-9-12 17:43
fantacyleo 发表于 2014-9-12 17:06
好吧。我仔细看一下。不过张老师的线程库视频确实问题不少。空中网3个面试题中有2个都有点问题 ...

我换成HashTable就好了,啥问题没有,用MyEclipse跑的。




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