Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
86916123
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看板
提交
86916123
编写于
2月 09, 2013
作者:
D
dl
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8005697: Add StampedLock
Reviewed-by: chegar, alanb, dice, martin
上级
661df508
变更
4
展开全部
隐藏空白更改
内联
并排
Showing
4 changed file
with
2040 addition
and
24 deletion
+2040
-24
make/java/java/FILES_java.gmk
make/java/java/FILES_java.gmk
+1
-0
src/share/classes/java/util/concurrent/locks/LockSupport.java
...share/classes/java/util/concurrent/locks/LockSupport.java
+53
-24
src/share/classes/java/util/concurrent/locks/StampedLock.java
...share/classes/java/util/concurrent/locks/StampedLock.java
+1377
-0
test/java/util/concurrent/locks/StampedLock/Basic.java
test/java/util/concurrent/locks/StampedLock/Basic.java
+609
-0
未找到文件。
make/java/java/FILES_java.gmk
浏览文件 @
86916123
...
...
@@ -389,6 +389,7 @@ JAVA_JAVA_java = \
java/util/concurrent/locks/ReadWriteLock.java \
java/util/concurrent/locks/ReentrantLock.java \
java/util/concurrent/locks/ReentrantReadWriteLock.java \
java/util/concurrent/locks/StampedLock.java \
java/util/regex/Pattern.java \
java/util/regex/Matcher.java \
java/util/regex/MatchResult.java \
...
...
src/share/classes/java/util/concurrent/locks/LockSupport.java
浏览文件 @
86916123
...
...
@@ -101,14 +101,14 @@ import sun.misc.Unsafe;
* // Block while not first in queue or cannot acquire lock
* while (waiters.peek() != current ||
* !locked.compareAndSet(false, true)) {
*
LockSupport.park(this);
*
if (Thread.interrupted()) // ignore interrupts while waiting
*
wasInterrupted = true;
* LockSupport.park(this);
* if (Thread.interrupted()) // ignore interrupts while waiting
* wasInterrupted = true;
* }
*
* waiters.remove();
* if (wasInterrupted) // reassert interrupt status on exit
*
current.interrupt();
* current.interrupt();
* }
*
* public void unlock() {
...
...
@@ -120,20 +120,9 @@ import sun.misc.Unsafe;
public
class
LockSupport
{
private
LockSupport
()
{}
// Cannot be instantiated.
// Hotspot implementation via intrinsics API
private
static
final
Unsafe
unsafe
=
Unsafe
.
getUnsafe
();
private
static
final
long
parkBlockerOffset
;
static
{
try
{
parkBlockerOffset
=
unsafe
.
objectFieldOffset
(
java
.
lang
.
Thread
.
class
.
getDeclaredField
(
"parkBlocker"
));
}
catch
(
Exception
ex
)
{
throw
new
Error
(
ex
);
}
}
private
static
void
setBlocker
(
Thread
t
,
Object
arg
)
{
// Even though volatile, hotspot doesn't need a write barrier here.
unsafe
.
putObject
(
t
,
parkBlockerOffset
,
arg
);
UNSAFE
.
putObject
(
t
,
parkBlockerOffset
,
arg
);
}
/**
...
...
@@ -149,7 +138,7 @@ public class LockSupport {
*/
public
static
void
unpark
(
Thread
thread
)
{
if
(
thread
!=
null
)
unsafe
.
unpark
(
thread
);
UNSAFE
.
unpark
(
thread
);
}
/**
...
...
@@ -183,7 +172,7 @@ public class LockSupport {
public
static
void
park
(
Object
blocker
)
{
Thread
t
=
Thread
.
currentThread
();
setBlocker
(
t
,
blocker
);
unsafe
.
park
(
false
,
0L
);
UNSAFE
.
park
(
false
,
0L
);
setBlocker
(
t
,
null
);
}
...
...
@@ -223,7 +212,7 @@ public class LockSupport {
if
(
nanos
>
0
)
{
Thread
t
=
Thread
.
currentThread
();
setBlocker
(
t
,
blocker
);
unsafe
.
park
(
false
,
nanos
);
UNSAFE
.
park
(
false
,
nanos
);
setBlocker
(
t
,
null
);
}
}
...
...
@@ -264,7 +253,7 @@ public class LockSupport {
public
static
void
parkUntil
(
Object
blocker
,
long
deadline
)
{
Thread
t
=
Thread
.
currentThread
();
setBlocker
(
t
,
blocker
);
unsafe
.
park
(
true
,
deadline
);
UNSAFE
.
park
(
true
,
deadline
);
setBlocker
(
t
,
null
);
}
...
...
@@ -283,7 +272,7 @@ public class LockSupport {
public
static
Object
getBlocker
(
Thread
t
)
{
if
(
t
==
null
)
throw
new
NullPointerException
();
return
unsafe
.
getObjectVolatile
(
t
,
parkBlockerOffset
);
return
UNSAFE
.
getObjectVolatile
(
t
,
parkBlockerOffset
);
}
/**
...
...
@@ -312,7 +301,7 @@ public class LockSupport {
* for example, the interrupt status of the thread upon return.
*/
public
static
void
park
()
{
unsafe
.
park
(
false
,
0L
);
UNSAFE
.
park
(
false
,
0L
);
}
/**
...
...
@@ -346,7 +335,7 @@ public class LockSupport {
*/
public
static
void
parkNanos
(
long
nanos
)
{
if
(
nanos
>
0
)
unsafe
.
park
(
false
,
nanos
);
UNSAFE
.
park
(
false
,
nanos
);
}
/**
...
...
@@ -380,6 +369,46 @@ public class LockSupport {
* to wait until
*/
public
static
void
parkUntil
(
long
deadline
)
{
unsafe
.
park
(
true
,
deadline
);
UNSAFE
.
park
(
true
,
deadline
);
}
/**
* Returns the pseudo-randomly initialized or updated secondary seed.
* Copied from ThreadLocalRandom due to package access restrictions.
*/
static
final
int
nextSecondarySeed
()
{
int
r
;
Thread
t
=
Thread
.
currentThread
();
if
((
r
=
UNSAFE
.
getInt
(
t
,
SECONDARY
))
!=
0
)
{
r
^=
r
<<
13
;
// xorshift
r
^=
r
>>>
17
;
r
^=
r
<<
5
;
}
else
if
((
r
=
java
.
util
.
concurrent
.
ThreadLocalRandom
.
current
().
nextInt
())
==
0
)
r
=
1
;
// avoid zero
UNSAFE
.
putInt
(
t
,
SECONDARY
,
r
);
return
r
;
}
// Hotspot implementation via intrinsics API
private
static
final
sun
.
misc
.
Unsafe
UNSAFE
;
private
static
final
long
parkBlockerOffset
;
private
static
final
long
SEED
;
private
static
final
long
PROBE
;
private
static
final
long
SECONDARY
;
static
{
try
{
UNSAFE
=
sun
.
misc
.
Unsafe
.
getUnsafe
();
Class
<?>
tk
=
Thread
.
class
;
parkBlockerOffset
=
UNSAFE
.
objectFieldOffset
(
tk
.
getDeclaredField
(
"parkBlocker"
));
SEED
=
UNSAFE
.
objectFieldOffset
(
tk
.
getDeclaredField
(
"threadLocalRandomSeed"
));
PROBE
=
UNSAFE
.
objectFieldOffset
(
tk
.
getDeclaredField
(
"threadLocalRandomProbe"
));
SECONDARY
=
UNSAFE
.
objectFieldOffset
(
tk
.
getDeclaredField
(
"threadLocalRandomSecondarySeed"
));
}
catch
(
Exception
ex
)
{
throw
new
Error
(
ex
);
}
}
}
src/share/classes/java/util/concurrent/locks/StampedLock.java
0 → 100644
浏览文件 @
86916123
此差异已折叠。
点击以展开。
test/java/util/concurrent/locks/StampedLock/Basic.java
0 → 100644
浏览文件 @
86916123
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录