Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
d49cc740
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看板
提交
d49cc740
编写于
1月 10, 2013
作者:
J
jjg
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
40cc9faa
b8a7c6dc
变更
15
隐藏空白更改
内联
并排
Showing
15 changed file
with
278 addition
and
267 deletion
+278
-267
src/share/classes/java/lang/Integer.java
src/share/classes/java/lang/Integer.java
+1
-1
src/share/classes/java/lang/annotation/Repeatable.java
src/share/classes/java/lang/annotation/Repeatable.java
+48
-0
src/share/classes/java/util/concurrent/atomic/AtomicBoolean.java
...re/classes/java/util/concurrent/atomic/AtomicBoolean.java
+7
-7
src/share/classes/java/util/concurrent/atomic/AtomicInteger.java
...re/classes/java/util/concurrent/atomic/AtomicInteger.java
+9
-43
src/share/classes/java/util/concurrent/atomic/AtomicIntegerArray.java
...asses/java/util/concurrent/atomic/AtomicIntegerArray.java
+6
-22
src/share/classes/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.java
...ava/util/concurrent/atomic/AtomicIntegerFieldUpdater.java
+71
-41
src/share/classes/java/util/concurrent/atomic/AtomicLong.java
...share/classes/java/util/concurrent/atomic/AtomicLong.java
+9
-43
src/share/classes/java/util/concurrent/atomic/AtomicLongArray.java
.../classes/java/util/concurrent/atomic/AtomicLongArray.java
+6
-22
src/share/classes/java/util/concurrent/atomic/AtomicLongFieldUpdater.java
...s/java/util/concurrent/atomic/AtomicLongFieldUpdater.java
+73
-43
src/share/classes/java/util/concurrent/atomic/AtomicReference.java
.../classes/java/util/concurrent/atomic/AtomicReference.java
+4
-7
src/share/classes/java/util/concurrent/atomic/AtomicReferenceArray.java
...ses/java/util/concurrent/atomic/AtomicReferenceArray.java
+3
-7
src/share/classes/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.java
...a/util/concurrent/atomic/AtomicReferenceFieldUpdater.java
+16
-7
test/java/lang/Runtime/exec/WinCommand.java
test/java/lang/Runtime/exec/WinCommand.java
+13
-18
test/java/lang/System/MacJNUEncoding/ExpectedEncoding.java
test/java/lang/System/MacJNUEncoding/ExpectedEncoding.java
+2
-2
test/java/lang/System/MacJNUEncoding/MacJNUEncoding.sh
test/java/lang/System/MacJNUEncoding/MacJNUEncoding.sh
+10
-4
未找到文件。
src/share/classes/java/lang/Integer.java
浏览文件 @
d49cc740
...
...
@@ -772,7 +772,7 @@ public final class Integer extends Number implements Comparable<Integer> {
int
i
=
parseInt
(
integerCacheHighPropValue
);
i
=
Math
.
max
(
i
,
127
);
// Maximum array size is Integer.MAX_VALUE
h
=
Math
.
min
(
i
,
Integer
.
MAX_VALUE
-
(-
low
));
h
=
Math
.
min
(
i
,
Integer
.
MAX_VALUE
-
(-
low
)
-
1
);
}
high
=
h
;
...
...
src/share/classes/java/lang/annotation/Repeatable.java
0 → 100644
浏览文件 @
d49cc740
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package
java.lang.annotation
;
/**
* The annotation type {@code java.lang.annotation.Repeatable} is
* used to indicate that the annotation type whose declaration it
* (meta-)annotates is <em>repeatable</em>. The value of
* {@code @Repeatable} indicates the <em>containing annotation
* type</em> for the repeatable annotation type.
*
* @since 1.8
* @jls 9.6 Annotation Types
* @jls 9.7 Annotations
*/
@Documented
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Target
(
ElementType
.
ANNOTATION_TYPE
)
public
@interface
Repeatable
{
/**
* Indicates the <em>containing annotation type</em> for the
* repeatable annotation type.
*/
Class
<?
extends
Annotation
>
value
();
}
src/share/classes/java/util/concurrent/atomic/AtomicBoolean.java
浏览文件 @
d49cc740
...
...
@@ -111,7 +111,7 @@ public class AtomicBoolean implements java.io.Serializable {
*
* @param expect the expected value
* @param update the new value
* @return true if successful
.
* @return true if successful
*/
public
boolean
weakCompareAndSet
(
boolean
expect
,
boolean
update
)
{
int
e
=
expect
?
1
:
0
;
...
...
@@ -146,16 +146,16 @@ public class AtomicBoolean implements java.io.Serializable {
* @return the previous value
*/
public
final
boolean
getAndSet
(
boolean
newValue
)
{
for
(;;)
{
boolean
current
=
get
();
if
(
compareAndSet
(
current
,
newValue
))
return
current
;
}
boolean
prev
;
do
{
prev
=
get
();
}
while
(!
compareAndSet
(
prev
,
newValue
))
;
return
prev
;
}
/**
* Returns the String representation of the current value.
* @return the String representation of the current value
.
* @return the String representation of the current value
*/
public
String
toString
()
{
return
Boolean
.
toString
(
get
());
...
...
src/share/classes/java/util/concurrent/atomic/AtomicInteger.java
浏览文件 @
d49cc740
...
...
@@ -115,11 +115,7 @@ public class AtomicInteger extends Number implements java.io.Serializable {
* @return the previous value
*/
public
final
int
getAndSet
(
int
newValue
)
{
for
(;;)
{
int
current
=
get
();
if
(
compareAndSet
(
current
,
newValue
))
return
current
;
}
return
unsafe
.
getAndSetInt
(
this
,
valueOffset
,
newValue
);
}
/**
...
...
@@ -145,7 +141,7 @@ public class AtomicInteger extends Number implements java.io.Serializable {
*
* @param expect the expected value
* @param update the new value
* @return true if successful
.
* @return true if successful
*/
public
final
boolean
weakCompareAndSet
(
int
expect
,
int
update
)
{
return
unsafe
.
compareAndSwapInt
(
this
,
valueOffset
,
expect
,
update
);
...
...
@@ -157,12 +153,7 @@ public class AtomicInteger extends Number implements java.io.Serializable {
* @return the previous value
*/
public
final
int
getAndIncrement
()
{
for
(;;)
{
int
current
=
get
();
int
next
=
current
+
1
;
if
(
compareAndSet
(
current
,
next
))
return
current
;
}
return
getAndAdd
(
1
);
}
/**
...
...
@@ -171,12 +162,7 @@ public class AtomicInteger extends Number implements java.io.Serializable {
* @return the previous value
*/
public
final
int
getAndDecrement
()
{
for
(;;)
{
int
current
=
get
();
int
next
=
current
-
1
;
if
(
compareAndSet
(
current
,
next
))
return
current
;
}
return
getAndAdd
(-
1
);
}
/**
...
...
@@ -186,12 +172,7 @@ public class AtomicInteger extends Number implements java.io.Serializable {
* @return the previous value
*/
public
final
int
getAndAdd
(
int
delta
)
{
for
(;;)
{
int
current
=
get
();
int
next
=
current
+
delta
;
if
(
compareAndSet
(
current
,
next
))
return
current
;
}
return
unsafe
.
getAndAddInt
(
this
,
valueOffset
,
delta
);
}
/**
...
...
@@ -200,12 +181,7 @@ public class AtomicInteger extends Number implements java.io.Serializable {
* @return the updated value
*/
public
final
int
incrementAndGet
()
{
for
(;;)
{
int
current
=
get
();
int
next
=
current
+
1
;
if
(
compareAndSet
(
current
,
next
))
return
next
;
}
return
getAndAdd
(
1
)
+
1
;
}
/**
...
...
@@ -214,12 +190,7 @@ public class AtomicInteger extends Number implements java.io.Serializable {
* @return the updated value
*/
public
final
int
decrementAndGet
()
{
for
(;;)
{
int
current
=
get
();
int
next
=
current
-
1
;
if
(
compareAndSet
(
current
,
next
))
return
next
;
}
return
getAndAdd
(-
1
)
-
1
;
}
/**
...
...
@@ -229,17 +200,12 @@ public class AtomicInteger extends Number implements java.io.Serializable {
* @return the updated value
*/
public
final
int
addAndGet
(
int
delta
)
{
for
(;;)
{
int
current
=
get
();
int
next
=
current
+
delta
;
if
(
compareAndSet
(
current
,
next
))
return
next
;
}
return
getAndAdd
(
delta
)
+
delta
;
}
/**
* Returns the String representation of the current value.
* @return the String representation of the current value
.
* @return the String representation of the current value
*/
public
String
toString
()
{
return
Integer
.
toString
(
get
());
...
...
src/share/classes/java/util/concurrent/atomic/AtomicIntegerArray.java
浏览文件 @
d49cc740
...
...
@@ -145,12 +145,7 @@ public class AtomicIntegerArray implements java.io.Serializable {
* @return the previous value
*/
public
final
int
getAndSet
(
int
i
,
int
newValue
)
{
long
offset
=
checkedByteOffset
(
i
);
while
(
true
)
{
int
current
=
getRaw
(
offset
);
if
(
compareAndSetRaw
(
offset
,
current
,
newValue
))
return
current
;
}
return
unsafe
.
getAndSetInt
(
array
,
checkedByteOffset
(
i
),
newValue
);
}
/**
...
...
@@ -182,7 +177,7 @@ public class AtomicIntegerArray implements java.io.Serializable {
* @param i the index
* @param expect the expected value
* @param update the new value
* @return true if successful
.
* @return true if successful
*/
public
final
boolean
weakCompareAndSet
(
int
i
,
int
expect
,
int
update
)
{
return
compareAndSet
(
i
,
expect
,
update
);
...
...
@@ -216,12 +211,7 @@ public class AtomicIntegerArray implements java.io.Serializable {
* @return the previous value
*/
public
final
int
getAndAdd
(
int
i
,
int
delta
)
{
long
offset
=
checkedByteOffset
(
i
);
while
(
true
)
{
int
current
=
getRaw
(
offset
);
if
(
compareAndSetRaw
(
offset
,
current
,
current
+
delta
))
return
current
;
}
return
unsafe
.
getAndAddInt
(
array
,
checkedByteOffset
(
i
),
delta
);
}
/**
...
...
@@ -231,7 +221,7 @@ public class AtomicIntegerArray implements java.io.Serializable {
* @return the updated value
*/
public
final
int
incrementAndGet
(
int
i
)
{
return
addAndGet
(
i
,
1
)
;
return
getAndAdd
(
i
,
1
)
+
1
;
}
/**
...
...
@@ -241,7 +231,7 @@ public class AtomicIntegerArray implements java.io.Serializable {
* @return the updated value
*/
public
final
int
decrementAndGet
(
int
i
)
{
return
addAndGet
(
i
,
-
1
)
;
return
getAndAdd
(
i
,
-
1
)
-
1
;
}
/**
...
...
@@ -252,13 +242,7 @@ public class AtomicIntegerArray implements java.io.Serializable {
* @return the updated value
*/
public
final
int
addAndGet
(
int
i
,
int
delta
)
{
long
offset
=
checkedByteOffset
(
i
);
while
(
true
)
{
int
current
=
getRaw
(
offset
);
int
next
=
current
+
delta
;
if
(
compareAndSetRaw
(
offset
,
current
,
next
))
return
next
;
}
return
getAndAdd
(
i
,
delta
)
+
delta
;
}
/**
...
...
src/share/classes/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.java
浏览文件 @
d49cc740
...
...
@@ -159,11 +159,11 @@ public abstract class AtomicIntegerFieldUpdater<T> {
* @return the previous value
*/
public
int
getAndSet
(
T
obj
,
int
newValue
)
{
for
(;;)
{
int
current
=
get
(
obj
);
if
(
compareAndSet
(
obj
,
current
,
newValue
))
return
current
;
}
int
prev
;
do
{
prev
=
get
(
obj
);
}
while
(!
compareAndSet
(
obj
,
prev
,
newValue
))
;
return
prev
;
}
/**
...
...
@@ -174,12 +174,12 @@ public abstract class AtomicIntegerFieldUpdater<T> {
* @return the previous value
*/
public
int
getAndIncrement
(
T
obj
)
{
for
(;;)
{
int
current
=
get
(
obj
);
int
next
=
current
+
1
;
if
(
compareAndSet
(
obj
,
current
,
next
))
return
current
;
}
int
prev
,
next
;
do
{
prev
=
get
(
obj
)
;
next
=
prev
+
1
;
}
while
(!
compareAndSet
(
obj
,
prev
,
next
))
;
return
prev
;
}
/**
...
...
@@ -190,12 +190,12 @@ public abstract class AtomicIntegerFieldUpdater<T> {
* @return the previous value
*/
public
int
getAndDecrement
(
T
obj
)
{
for
(;;)
{
int
current
=
get
(
obj
);
int
next
=
current
-
1
;
if
(
compareAndSet
(
obj
,
current
,
next
))
return
current
;
}
int
prev
,
next
;
do
{
prev
=
get
(
obj
)
;
next
=
prev
-
1
;
}
while
(!
compareAndSet
(
obj
,
prev
,
next
))
;
return
prev
;
}
/**
...
...
@@ -207,12 +207,12 @@ public abstract class AtomicIntegerFieldUpdater<T> {
* @return the previous value
*/
public
int
getAndAdd
(
T
obj
,
int
delta
)
{
for
(;;)
{
int
current
=
get
(
obj
);
int
next
=
current
+
delta
;
if
(
compareAndSet
(
obj
,
current
,
next
))
return
current
;
}
int
prev
,
next
;
do
{
prev
=
get
(
obj
)
;
next
=
prev
+
delta
;
}
while
(!
compareAndSet
(
obj
,
prev
,
next
))
;
return
prev
;
}
/**
...
...
@@ -223,12 +223,12 @@ public abstract class AtomicIntegerFieldUpdater<T> {
* @return the updated value
*/
public
int
incrementAndGet
(
T
obj
)
{
for
(;;)
{
int
current
=
get
(
obj
);
int
next
=
current
+
1
;
if
(
compareAndSet
(
obj
,
current
,
next
))
return
next
;
}
int
prev
,
next
;
do
{
prev
=
get
(
obj
)
;
next
=
prev
+
1
;
}
while
(!
compareAndSet
(
obj
,
prev
,
next
))
;
return
next
;
}
/**
...
...
@@ -239,12 +239,12 @@ public abstract class AtomicIntegerFieldUpdater<T> {
* @return the updated value
*/
public
int
decrementAndGet
(
T
obj
)
{
for
(;;)
{
int
current
=
get
(
obj
);
int
next
=
current
-
1
;
if
(
compareAndSet
(
obj
,
current
,
next
))
return
next
;
}
int
prev
,
next
;
do
{
prev
=
get
(
obj
)
;
next
=
prev
-
1
;
}
while
(!
compareAndSet
(
obj
,
prev
,
next
))
;
return
next
;
}
/**
...
...
@@ -256,12 +256,12 @@ public abstract class AtomicIntegerFieldUpdater<T> {
* @return the updated value
*/
public
int
addAndGet
(
T
obj
,
int
delta
)
{
for
(;;)
{
int
current
=
get
(
obj
);
int
next
=
current
+
delta
;
if
(
compareAndSet
(
obj
,
current
,
next
))
return
next
;
}
int
prev
,
next
;
do
{
prev
=
get
(
obj
)
;
next
=
prev
+
delta
;
}
while
(!
compareAndSet
(
obj
,
prev
,
next
))
;
return
next
;
}
/**
...
...
@@ -361,6 +361,36 @@ public abstract class AtomicIntegerFieldUpdater<T> {
return
unsafe
.
getIntVolatile
(
obj
,
offset
);
}
public
int
getAndSet
(
T
obj
,
int
newValue
)
{
if
(
obj
==
null
||
obj
.
getClass
()
!=
tclass
||
cclass
!=
null
)
fullCheck
(
obj
);
return
unsafe
.
getAndSetInt
(
obj
,
offset
,
newValue
);
}
public
int
getAndIncrement
(
T
obj
)
{
return
getAndAdd
(
obj
,
1
);
}
public
int
getAndDecrement
(
T
obj
)
{
return
getAndAdd
(
obj
,
-
1
);
}
public
int
getAndAdd
(
T
obj
,
int
delta
)
{
if
(
obj
==
null
||
obj
.
getClass
()
!=
tclass
||
cclass
!=
null
)
fullCheck
(
obj
);
return
unsafe
.
getAndAddInt
(
obj
,
offset
,
delta
);
}
public
int
incrementAndGet
(
T
obj
)
{
return
getAndAdd
(
obj
,
1
)
+
1
;
}
public
int
decrementAndGet
(
T
obj
)
{
return
getAndAdd
(
obj
,
-
1
)
-
1
;
}
public
int
addAndGet
(
T
obj
,
int
delta
)
{
return
getAndAdd
(
obj
,
delta
)
+
delta
;
}
private
void
ensureProtectedAccess
(
T
obj
)
{
if
(
cclass
.
isInstance
(
obj
))
{
return
;
...
...
src/share/classes/java/util/concurrent/atomic/AtomicLong.java
浏览文件 @
d49cc740
...
...
@@ -129,11 +129,7 @@ public class AtomicLong extends Number implements java.io.Serializable {
* @return the previous value
*/
public
final
long
getAndSet
(
long
newValue
)
{
while
(
true
)
{
long
current
=
get
();
if
(
compareAndSet
(
current
,
newValue
))
return
current
;
}
return
unsafe
.
getAndSetLong
(
this
,
valueOffset
,
newValue
);
}
/**
...
...
@@ -159,7 +155,7 @@ public class AtomicLong extends Number implements java.io.Serializable {
*
* @param expect the expected value
* @param update the new value
* @return true if successful
.
* @return true if successful
*/
public
final
boolean
weakCompareAndSet
(
long
expect
,
long
update
)
{
return
unsafe
.
compareAndSwapLong
(
this
,
valueOffset
,
expect
,
update
);
...
...
@@ -171,12 +167,7 @@ public class AtomicLong extends Number implements java.io.Serializable {
* @return the previous value
*/
public
final
long
getAndIncrement
()
{
while
(
true
)
{
long
current
=
get
();
long
next
=
current
+
1
;
if
(
compareAndSet
(
current
,
next
))
return
current
;
}
return
getAndAdd
(
1
);
}
/**
...
...
@@ -185,12 +176,7 @@ public class AtomicLong extends Number implements java.io.Serializable {
* @return the previous value
*/
public
final
long
getAndDecrement
()
{
while
(
true
)
{
long
current
=
get
();
long
next
=
current
-
1
;
if
(
compareAndSet
(
current
,
next
))
return
current
;
}
return
getAndAdd
(-
1
);
}
/**
...
...
@@ -200,12 +186,7 @@ public class AtomicLong extends Number implements java.io.Serializable {
* @return the previous value
*/
public
final
long
getAndAdd
(
long
delta
)
{
while
(
true
)
{
long
current
=
get
();
long
next
=
current
+
delta
;
if
(
compareAndSet
(
current
,
next
))
return
current
;
}
return
unsafe
.
getAndAddLong
(
this
,
valueOffset
,
delta
);
}
/**
...
...
@@ -214,12 +195,7 @@ public class AtomicLong extends Number implements java.io.Serializable {
* @return the updated value
*/
public
final
long
incrementAndGet
()
{
for
(;;)
{
long
current
=
get
();
long
next
=
current
+
1
;
if
(
compareAndSet
(
current
,
next
))
return
next
;
}
return
getAndAdd
(
1
)
+
1
;
}
/**
...
...
@@ -228,12 +204,7 @@ public class AtomicLong extends Number implements java.io.Serializable {
* @return the updated value
*/
public
final
long
decrementAndGet
()
{
for
(;;)
{
long
current
=
get
();
long
next
=
current
-
1
;
if
(
compareAndSet
(
current
,
next
))
return
next
;
}
return
getAndAdd
(-
1
)
-
1
;
}
/**
...
...
@@ -243,17 +214,12 @@ public class AtomicLong extends Number implements java.io.Serializable {
* @return the updated value
*/
public
final
long
addAndGet
(
long
delta
)
{
for
(;;)
{
long
current
=
get
();
long
next
=
current
+
delta
;
if
(
compareAndSet
(
current
,
next
))
return
next
;
}
return
getAndAdd
(
delta
)
+
delta
;
}
/**
* Returns the String representation of the current value.
* @return the String representation of the current value
.
* @return the String representation of the current value
*/
public
String
toString
()
{
return
Long
.
toString
(
get
());
...
...
src/share/classes/java/util/concurrent/atomic/AtomicLongArray.java
浏览文件 @
d49cc740
...
...
@@ -144,12 +144,7 @@ public class AtomicLongArray implements java.io.Serializable {
* @return the previous value
*/
public
final
long
getAndSet
(
int
i
,
long
newValue
)
{
long
offset
=
checkedByteOffset
(
i
);
while
(
true
)
{
long
current
=
getRaw
(
offset
);
if
(
compareAndSetRaw
(
offset
,
current
,
newValue
))
return
current
;
}
return
unsafe
.
getAndSetLong
(
array
,
checkedByteOffset
(
i
),
newValue
);
}
/**
...
...
@@ -181,7 +176,7 @@ public class AtomicLongArray implements java.io.Serializable {
* @param i the index
* @param expect the expected value
* @param update the new value
* @return true if successful
.
* @return true if successful
*/
public
final
boolean
weakCompareAndSet
(
int
i
,
long
expect
,
long
update
)
{
return
compareAndSet
(
i
,
expect
,
update
);
...
...
@@ -215,12 +210,7 @@ public class AtomicLongArray implements java.io.Serializable {
* @return the previous value
*/
public
final
long
getAndAdd
(
int
i
,
long
delta
)
{
long
offset
=
checkedByteOffset
(
i
);
while
(
true
)
{
long
current
=
getRaw
(
offset
);
if
(
compareAndSetRaw
(
offset
,
current
,
current
+
delta
))
return
current
;
}
return
unsafe
.
getAndAddLong
(
array
,
checkedByteOffset
(
i
),
delta
);
}
/**
...
...
@@ -230,7 +220,7 @@ public class AtomicLongArray implements java.io.Serializable {
* @return the updated value
*/
public
final
long
incrementAndGet
(
int
i
)
{
return
addAndGet
(
i
,
1
)
;
return
getAndAdd
(
i
,
1
)
+
1
;
}
/**
...
...
@@ -240,7 +230,7 @@ public class AtomicLongArray implements java.io.Serializable {
* @return the updated value
*/
public
final
long
decrementAndGet
(
int
i
)
{
return
addAndGet
(
i
,
-
1
)
;
return
getAndAdd
(
i
,
-
1
)
-
1
;
}
/**
...
...
@@ -251,13 +241,7 @@ public class AtomicLongArray implements java.io.Serializable {
* @return the updated value
*/
public
long
addAndGet
(
int
i
,
long
delta
)
{
long
offset
=
checkedByteOffset
(
i
);
while
(
true
)
{
long
current
=
getRaw
(
offset
);
long
next
=
current
+
delta
;
if
(
compareAndSetRaw
(
offset
,
current
,
next
))
return
next
;
}
return
getAndAdd
(
i
,
delta
)
+
delta
;
}
/**
...
...
src/share/classes/java/util/concurrent/atomic/AtomicLongFieldUpdater.java
浏览文件 @
d49cc740
...
...
@@ -98,7 +98,7 @@ public abstract class AtomicLongFieldUpdater<T> {
* @param obj An object whose field to conditionally set
* @param expect the expected value
* @param update the new value
* @return true if successful
.
* @return true if successful
* @throws ClassCastException if {@code obj} is not an instance
* of the class possessing the field established in the constructor.
*/
...
...
@@ -118,7 +118,7 @@ public abstract class AtomicLongFieldUpdater<T> {
* @param obj An object whose field to conditionally set
* @param expect the expected value
* @param update the new value
* @return true if successful
.
* @return true if successful
* @throws ClassCastException if {@code obj} is not an instance
* of the class possessing the field established in the constructor.
*/
...
...
@@ -162,11 +162,11 @@ public abstract class AtomicLongFieldUpdater<T> {
* @return the previous value
*/
public
long
getAndSet
(
T
obj
,
long
newValue
)
{
for
(;;)
{
long
current
=
get
(
obj
);
if
(
compareAndSet
(
obj
,
current
,
newValue
))
return
current
;
}
long
prev
;
do
{
prev
=
get
(
obj
);
}
while
(!
compareAndSet
(
obj
,
prev
,
newValue
))
;
return
prev
;
}
/**
...
...
@@ -177,12 +177,12 @@ public abstract class AtomicLongFieldUpdater<T> {
* @return the previous value
*/
public
long
getAndIncrement
(
T
obj
)
{
for
(;;)
{
long
current
=
get
(
obj
);
long
next
=
current
+
1
;
if
(
compareAndSet
(
obj
,
current
,
next
))
return
current
;
}
long
prev
,
next
;
do
{
prev
=
get
(
obj
)
;
next
=
prev
+
1
;
}
while
(!
compareAndSet
(
obj
,
prev
,
next
))
;
return
prev
;
}
/**
...
...
@@ -193,12 +193,12 @@ public abstract class AtomicLongFieldUpdater<T> {
* @return the previous value
*/
public
long
getAndDecrement
(
T
obj
)
{
for
(;;)
{
long
current
=
get
(
obj
);
long
next
=
current
-
1
;
if
(
compareAndSet
(
obj
,
current
,
next
))
return
current
;
}
long
prev
,
next
;
do
{
prev
=
get
(
obj
)
;
next
=
prev
-
1
;
}
while
(!
compareAndSet
(
obj
,
prev
,
next
))
;
return
prev
;
}
/**
...
...
@@ -210,12 +210,12 @@ public abstract class AtomicLongFieldUpdater<T> {
* @return the previous value
*/
public
long
getAndAdd
(
T
obj
,
long
delta
)
{
for
(;;)
{
long
current
=
get
(
obj
);
long
next
=
current
+
delta
;
if
(
compareAndSet
(
obj
,
current
,
next
))
return
current
;
}
long
prev
,
next
;
do
{
prev
=
get
(
obj
)
;
next
=
prev
+
delta
;
}
while
(!
compareAndSet
(
obj
,
prev
,
next
))
;
return
prev
;
}
/**
...
...
@@ -226,12 +226,12 @@ public abstract class AtomicLongFieldUpdater<T> {
* @return the updated value
*/
public
long
incrementAndGet
(
T
obj
)
{
for
(;;)
{
long
current
=
get
(
obj
);
long
next
=
current
+
1
;
if
(
compareAndSet
(
obj
,
current
,
next
))
return
next
;
}
long
prev
,
next
;
do
{
prev
=
get
(
obj
)
;
next
=
prev
+
1
;
}
while
(!
compareAndSet
(
obj
,
prev
,
next
))
;
return
next
;
}
/**
...
...
@@ -242,12 +242,12 @@ public abstract class AtomicLongFieldUpdater<T> {
* @return the updated value
*/
public
long
decrementAndGet
(
T
obj
)
{
for
(;;)
{
long
current
=
get
(
obj
);
long
next
=
current
-
1
;
if
(
compareAndSet
(
obj
,
current
,
next
))
return
next
;
}
long
prev
,
next
;
do
{
prev
=
get
(
obj
)
;
next
=
prev
-
1
;
}
while
(!
compareAndSet
(
obj
,
prev
,
next
))
;
return
next
;
}
/**
...
...
@@ -259,12 +259,12 @@ public abstract class AtomicLongFieldUpdater<T> {
* @return the updated value
*/
public
long
addAndGet
(
T
obj
,
long
delta
)
{
for
(;;)
{
long
current
=
get
(
obj
);
long
next
=
current
+
delta
;
if
(
compareAndSet
(
obj
,
current
,
next
))
return
next
;
}
long
prev
,
next
;
do
{
prev
=
get
(
obj
)
;
next
=
prev
+
delta
;
}
while
(!
compareAndSet
(
obj
,
prev
,
next
))
;
return
next
;
}
private
static
class
CASUpdater
<
T
>
extends
AtomicLongFieldUpdater
<
T
>
{
...
...
@@ -345,6 +345,36 @@ public abstract class AtomicLongFieldUpdater<T> {
return
unsafe
.
getLongVolatile
(
obj
,
offset
);
}
public
long
getAndSet
(
T
obj
,
long
newValue
)
{
if
(
obj
==
null
||
obj
.
getClass
()
!=
tclass
||
cclass
!=
null
)
fullCheck
(
obj
);
return
unsafe
.
getAndSetLong
(
obj
,
offset
,
newValue
);
}
public
long
getAndIncrement
(
T
obj
)
{
return
getAndAdd
(
obj
,
1
);
}
public
long
getAndDecrement
(
T
obj
)
{
return
getAndAdd
(
obj
,
-
1
);
}
public
long
getAndAdd
(
T
obj
,
long
delta
)
{
if
(
obj
==
null
||
obj
.
getClass
()
!=
tclass
||
cclass
!=
null
)
fullCheck
(
obj
);
return
unsafe
.
getAndAddLong
(
obj
,
offset
,
delta
);
}
public
long
incrementAndGet
(
T
obj
)
{
return
getAndAdd
(
obj
,
1
)
+
1
;
}
public
long
decrementAndGet
(
T
obj
)
{
return
getAndAdd
(
obj
,
-
1
)
-
1
;
}
public
long
addAndGet
(
T
obj
,
long
delta
)
{
return
getAndAdd
(
obj
,
delta
)
+
delta
;
}
private
void
ensureProtectedAccess
(
T
obj
)
{
if
(
cclass
.
isInstance
(
obj
))
{
return
;
...
...
src/share/classes/java/util/concurrent/atomic/AtomicReference.java
浏览文件 @
d49cc740
...
...
@@ -124,7 +124,7 @@ public class AtomicReference<V> implements java.io.Serializable {
*
* @param expect the expected value
* @param update the new value
* @return true if successful
.
* @return true if successful
*/
public
final
boolean
weakCompareAndSet
(
V
expect
,
V
update
)
{
return
unsafe
.
compareAndSwapObject
(
this
,
valueOffset
,
expect
,
update
);
...
...
@@ -136,17 +136,14 @@ public class AtomicReference<V> implements java.io.Serializable {
* @param newValue the new value
* @return the previous value
*/
@SuppressWarnings
(
"unchecked"
)
public
final
V
getAndSet
(
V
newValue
)
{
while
(
true
)
{
V
x
=
get
();
if
(
compareAndSet
(
x
,
newValue
))
return
x
;
}
return
(
V
)
unsafe
.
getAndSetObject
(
this
,
valueOffset
,
newValue
);
}
/**
* Returns the String representation of the current value.
* @return the String representation of the current value
.
* @return the String representation of the current value
*/
public
String
toString
()
{
return
String
.
valueOf
(
get
());
...
...
src/share/classes/java/util/concurrent/atomic/AtomicReferenceArray.java
浏览文件 @
d49cc740
...
...
@@ -159,13 +159,9 @@ public class AtomicReferenceArray<E> implements java.io.Serializable {
* @param newValue the new value
* @return the previous value
*/
@SuppressWarnings
(
"unchecked"
)
public
final
E
getAndSet
(
int
i
,
E
newValue
)
{
long
offset
=
checkedByteOffset
(
i
);
while
(
true
)
{
E
current
=
getRaw
(
offset
);
if
(
compareAndSetRaw
(
offset
,
current
,
newValue
))
return
current
;
}
return
(
E
)
unsafe
.
getAndSetObject
(
array
,
checkedByteOffset
(
i
),
newValue
);
}
/**
...
...
@@ -197,7 +193,7 @@ public class AtomicReferenceArray<E> implements java.io.Serializable {
* @param i the index
* @param expect the expected value
* @param update the new value
* @return true if successful
.
* @return true if successful
*/
public
final
boolean
weakCompareAndSet
(
int
i
,
E
expect
,
E
update
)
{
return
compareAndSet
(
i
,
expect
,
update
);
...
...
src/share/classes/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.java
浏览文件 @
d49cc740
...
...
@@ -116,7 +116,7 @@ public abstract class AtomicReferenceFieldUpdater<T, V> {
* @param obj An object whose field to conditionally set
* @param expect the expected value
* @param update the new value
* @return true if successful
.
* @return true if successful
*/
public
abstract
boolean
compareAndSet
(
T
obj
,
V
expect
,
V
update
);
...
...
@@ -134,7 +134,7 @@ public abstract class AtomicReferenceFieldUpdater<T, V> {
* @param obj An object whose field to conditionally set
* @param expect the expected value
* @param update the new value
* @return true if successful
.
* @return true if successful
*/
public
abstract
boolean
weakCompareAndSet
(
T
obj
,
V
expect
,
V
update
);
...
...
@@ -176,11 +176,11 @@ public abstract class AtomicReferenceFieldUpdater<T, V> {
* @return the previous value
*/
public
V
getAndSet
(
T
obj
,
V
newValue
)
{
for
(;;)
{
V
current
=
get
(
obj
);
if
(
compareAndSet
(
obj
,
current
,
newValue
))
return
current
;
}
V
prev
;
do
{
prev
=
get
(
obj
);
}
while
(!
compareAndSet
(
obj
,
prev
,
newValue
))
;
return
prev
;
}
private
static
final
class
AtomicReferenceFieldUpdaterImpl
<
T
,
V
>
...
...
@@ -321,6 +321,15 @@ public abstract class AtomicReferenceFieldUpdater<T, V> {
return
(
V
)
unsafe
.
getObjectVolatile
(
obj
,
offset
);
}
@SuppressWarnings
(
"unchecked"
)
public
V
getAndSet
(
T
obj
,
V
newValue
)
{
if
(
obj
==
null
||
obj
.
getClass
()
!=
tclass
||
cclass
!=
null
||
(
newValue
!=
null
&&
vclass
!=
null
&&
vclass
!=
newValue
.
getClass
()))
updateCheck
(
obj
,
newValue
);
return
(
V
)
unsafe
.
getAndSetObject
(
obj
,
offset
,
newValue
);
}
private
void
ensureProtectedAccess
(
T
obj
)
{
if
(
cclass
.
isInstance
(
obj
))
{
return
;
...
...
test/java/lang/Runtime/exec/WinCommand.java
浏览文件 @
d49cc740
...
...
@@ -135,24 +135,19 @@ public class WinCommand {
// Win9x systems don't have a cmd.exe
if
(
new
File
(
systemDirW
,
"cmd.exe"
).
exists
())
{
try
{
out
.
println
(
"Running cmd.exe tests..."
);
writeFile
(
"cdcmd.cmd"
,
"@echo off\r\nCD\r\n"
);
writeFile
(
"cdbat.bat"
,
"@echo off\r\nCD\r\n"
);
checkCD
(
"cmd"
,
"cmd.exe"
,
systemDirW
+
"\\cmd.exe"
,
// Only the ".exe" extension can be omitted
systemDirW
+
"\\cmd"
,
systemDirM
+
"/cmd.exe"
,
systemDirM
+
"/cmd"
,
"/"
+
systemDirM
+
"/cmd"
,
"cdcmd.cmd"
,
"./cdcmd.cmd"
,
".\\cdcmd.cmd"
,
"cdbat.bat"
,
"./cdbat.bat"
,
".\\cdbat.bat"
);
}
finally
{
new
File
(
"cdcmd.cmd"
).
delete
();
new
File
(
"cdbat.bat"
).
delete
();
}
out
.
println
(
"Running cmd.exe tests..."
);
writeFile
(
"cdcmd.cmd"
,
"@echo off\r\nCD\r\n"
);
writeFile
(
"cdbat.bat"
,
"@echo off\r\nCD\r\n"
);
checkCD
(
"cmd"
,
"cmd.exe"
,
systemDirW
+
"\\cmd.exe"
,
// Only the ".exe" extension can be omitted
systemDirW
+
"\\cmd"
,
systemDirM
+
"/cmd.exe"
,
systemDirM
+
"/cmd"
,
"/"
+
systemDirM
+
"/cmd"
,
"cdcmd.cmd"
,
"./cdcmd.cmd"
,
".\\cdcmd.cmd"
,
"cdbat.bat"
,
"./cdbat.bat"
,
".\\cdbat.bat"
);
}
// 16-bit apps like command.com must have a console;
...
...
test/java/
util/Properties
/MacJNUEncoding/ExpectedEncoding.java
→
test/java/
lang/System
/MacJNUEncoding/ExpectedEncoding.java
浏览文件 @
d49cc740
...
...
@@ -31,6 +31,7 @@ public class ExpectedEncoding {
if
(
args
.
length
!=
2
)
{
System
.
out
.
println
(
"Usage:"
);
System
.
out
.
println
(
"$ java ExpectedEncoding <expected file.encoding> <expected sun.jnu.encoding>"
);
System
.
exit
(
1
);
}
String
expectFileEnc
=
args
[
0
];
String
expectSunJnuEnc
=
args
[
1
];
...
...
@@ -49,8 +50,7 @@ public class ExpectedEncoding {
failed
=
true
;
}
if
(
failed
)
{
System
.
err
.
println
(
"Test Failed"
);
System
.
exit
(
1
);
throw
new
RuntimeException
(
"Test Failed"
);
}
}
}
test/java/
util/Properties
/MacJNUEncoding/MacJNUEncoding.sh
→
test/java/
lang/System
/MacJNUEncoding/MacJNUEncoding.sh
浏览文件 @
d49cc740
...
...
@@ -63,14 +63,16 @@ echo "Building test classes..."
"
$JAVAC
"
-d
"
${
TESTCLASSES
}
"
"
${
TESTSRC
}
"
/ExpectedEncoding.java
echo
""
echo
"Running test for
LANG=C
"
echo
"Running test for
C locale
"
export
LANG
=
C
export
LC_ALL
=
C
"
${
JAVA
}
"
${
TESTVMOPTS
}
-classpath
"
${
TESTCLASSES
}
"
ExpectedEncoding US-ASCII UTF-8
result1
=
$?
echo
""
echo
"Running test for
LANG=en_US.UTF-8
"
echo
"Running test for
en_US.UTF-8 locale
"
export
LANG
=
en_US.UTF-8
export
LC_ALL
=
en_US.UTF-8
"
${
JAVA
}
"
${
TESTVMOPTS
}
-classpath
"
${
TESTCLASSES
}
"
ExpectedEncoding UTF-8 UTF-8
result2
=
$?
...
...
@@ -79,11 +81,15 @@ echo "Cleanup"
rm
${
TESTCLASSES
}
/ExpectedEncoding.class
if
[
${
result1
}
-ne
0
]
;
then
echo
"Test failed for LANG=C"
echo
"Test failed for C locale"
echo
" LANG=
\"
${
LANG
}
\"
"
echo
" LC_ALL=
\"
${
LC_ALL
}
\"
"
exit
${
result1
}
fi
if
[
${
result2
}
-ne
0
]
;
then
echo
"Test failed for LANG=en_US.UTF-8"
echo
"Test failed for en_US.UTF-8 locale"
echo
" LANG=
\"
${
LANG
}
\"
"
echo
" LC_ALL=
\"
${
LC_ALL
}
\"
"
exit
${
result2
}
fi
exit
0
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录