Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
5a3bbd9a
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
5a3bbd9a
编写于
3月 03, 2013
作者:
C
chegar
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8009063: Improve reliability of ConcurrentHashMap
Reviewed-by: alanb, ahgross
上级
bff7d0ca
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
27 addition
and
1 deletion
+27
-1
src/share/classes/java/util/concurrent/ConcurrentHashMap.java
...share/classes/java/util/concurrent/ConcurrentHashMap.java
+27
-1
未找到文件。
src/share/classes/java/util/concurrent/ConcurrentHashMap.java
浏览文件 @
5a3bbd9a
...
...
@@ -34,6 +34,7 @@
*/
package
java.util.concurrent
;
import
java.io.ObjectInputStream
;
import
java.util.concurrent.locks.*
;
import
java.util.*
;
import
java.io.Serializable
;
...
...
@@ -1483,7 +1484,23 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
@SuppressWarnings
(
"unchecked"
)
private
void
readObject
(
java
.
io
.
ObjectInputStream
s
)
throws
java
.
io
.
IOException
,
ClassNotFoundException
{
s
.
defaultReadObject
();
// Don't call defaultReadObject()
ObjectInputStream
.
GetField
oisFields
=
s
.
readFields
();
final
Segment
<
K
,
V
>[]
oisSegments
=
(
Segment
<
K
,
V
>[])
oisFields
.
get
(
"segments"
,
null
);
final
int
ssize
=
oisSegments
.
length
;
if
(
ssize
<
1
||
ssize
>
MAX_SEGMENTS
||
(
ssize
&
(
ssize
-
1
))
!=
0
)
// ssize not power of two
throw
new
java
.
io
.
InvalidObjectException
(
"Bad number of segments:"
+
ssize
);
int
sshift
=
0
,
ssizeTmp
=
ssize
;
while
(
ssizeTmp
>
1
)
{
++
sshift
;
ssizeTmp
>>>=
1
;
}
UNSAFE
.
putIntVolatile
(
this
,
SEGSHIFT_OFFSET
,
32
-
sshift
);
UNSAFE
.
putIntVolatile
(
this
,
SEGMASK_OFFSET
,
ssize
-
1
);
UNSAFE
.
putObjectVolatile
(
this
,
SEGMENTS_OFFSET
,
oisSegments
);
// set hashMask
UNSAFE
.
putIntVolatile
(
this
,
HASHSEED_OFFSET
,
...
...
@@ -1517,6 +1534,9 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
private
static
final
long
TBASE
;
private
static
final
int
TSHIFT
;
private
static
final
long
HASHSEED_OFFSET
;
private
static
final
long
SEGSHIFT_OFFSET
;
private
static
final
long
SEGMASK_OFFSET
;
private
static
final
long
SEGMENTS_OFFSET
;
static
{
int
ss
,
ts
;
...
...
@@ -1530,6 +1550,12 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
ss
=
UNSAFE
.
arrayIndexScale
(
sc
);
HASHSEED_OFFSET
=
UNSAFE
.
objectFieldOffset
(
ConcurrentHashMap
.
class
.
getDeclaredField
(
"hashSeed"
));
SEGSHIFT_OFFSET
=
UNSAFE
.
objectFieldOffset
(
ConcurrentHashMap
.
class
.
getDeclaredField
(
"segmentShift"
));
SEGMASK_OFFSET
=
UNSAFE
.
objectFieldOffset
(
ConcurrentHashMap
.
class
.
getDeclaredField
(
"segmentMask"
));
SEGMENTS_OFFSET
=
UNSAFE
.
objectFieldOffset
(
ConcurrentHashMap
.
class
.
getDeclaredField
(
"segments"
));
}
catch
(
Exception
e
)
{
throw
new
Error
(
e
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录