关于java并发的两个问题

plugin 发布于 2014/09/14 20:49
阅读 934
收藏 3

 

想说明一下,第一个问题那个空指针异常出现的概率非常低。。。。

加载中
0
purely
purely

第一个线程执行到ArrayList<String> list = cache.get(name)时,

第二个线程cache.put(name, this.getPermission2(name))//这里getPermission2(name)中返回了null

所以if(list.size()==)报空指针

0
plugin
plugin

引用来自“purely”的评论

第一个线程执行到ArrayList<String> list = cache.get(name)时,

第二个线程cache.put(name, this.getPermission2(name))//这里getPermission2(name)中返回了null

所以if(list.size()==)报空指针

getPermission2(name)中返回了null,应该是ArrayList没有构造成功的情况下,我这个方法不应该会构造不成功啊
0
宇智波带土
宇智波带土
看不到具体程序代码。可能是


线程1 执行 getPermissions2 中间随眠的时候被interrupt了 返回 null


线程2 执行 ArrayList<String> list = cache.get(name) 时为null ,
list.size()抛出NullPointerException





0
plugin
plugin

引用来自“宇智波带土”的评论

看不到具体程序代码。可能是


线程1 执行 getPermissions2 中间随眠的时候被interrupt了 返回 null


线程2 执行 ArrayList<String> list = cache.get(name) 时为null ,
list.size()抛出NullPointerException





测试的main方法如下:

 

错误的情况:

 

另外睡眠的线程怎么会无缘无故被打断呢

0
LucEsape
LucEsape
线程问题 一般先通俗考虑资源 是否被抢先试用。
0
winnie_tour
winnie_tour
lz ,你这个代码里唯一出现多线程有数据共享的地方也就是这个hashmap了,你换成hashtable或者concurrenthash试试,如果没问题了就要看下map的put方法是如何实现的了
0
winnie_tour
winnie_tour
我没看过源码,但是猜想相同key的value更新的时候是不是先做了remove,如果是的话就符合lz的错误场景了
0
宇智波带土
宇智波带土

引用来自“宇智波带土”的评论

看不到具体程序代码。可能是


线程1 执行 getPermissions2 中间随眠的时候被interrupt了 返回 null


线程2 执行 ArrayList<String> list = cache.get(name) 时为null ,
list.size()抛出NullPointerException





引用来自“plugin”的评论

测试的main方法如下:

 

错误的情况:

 

另外睡眠的线程怎么会无缘无故被打断呢

我说的是一种情况不是说你的这种情况就一定是这种。但是确实会有某些程序会遇到被打断。

如果你的es.shutdown().改成shutdownNow()就会被打断,返回null.

你的代码,确定都是全部代码,我测试暂时还没发现异常。

返回顶部
顶部