Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell11
提交
3b0a64c7
D
dragonwell11
项目概览
openanolis
/
dragonwell11
通知
7
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell11
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3b0a64c7
编写于
9月 22, 2009
作者:
C
chegar
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6882654: Remove dependency on java.util.concurrent from KeepAlive implementaion
Reviewed-by: michaelm
上级
a22d7f21
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
71 addition
and
54 deletion
+71
-54
jdk/src/share/classes/sun/net/www/http/KeepAliveCache.java
jdk/src/share/classes/sun/net/www/http/KeepAliveCache.java
+6
-5
jdk/src/share/classes/sun/net/www/http/KeepAliveStream.java
jdk/src/share/classes/sun/net/www/http/KeepAliveStream.java
+37
-38
jdk/src/share/classes/sun/net/www/http/KeepAliveStreamCleaner.java
...hare/classes/sun/net/www/http/KeepAliveStreamCleaner.java
+28
-11
未找到文件。
jdk/src/share/classes/sun/net/www/http/KeepAliveCache.java
浏览文件 @
3b0a64c7
...
...
@@ -25,12 +25,11 @@
package
sun.net.www.http
;
import
java.io.InputStream
;
import
java.io.IOException
;
import
java.io.NotSerializableException
;
import
java.util.*
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.net.URL
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* A class that implements a cache of idle Http connections for keep-alive
...
...
@@ -39,7 +38,7 @@ import java.util.concurrent.ConcurrentHashMap;
* @author Dave Brown
*/
public
class
KeepAliveCache
extends
Concurrent
HashMap
<
KeepAliveKey
,
ClientVector
>
extends
HashMap
<
KeepAliveKey
,
ClientVector
>
implements
Runnable
{
private
static
final
long
serialVersionUID
=
-
2937172892064557949L
;
...
...
@@ -163,8 +162,8 @@ public class KeepAliveCache
* Errs on the side of caution (leave connections idle for a relatively
* short time).
*/
@Override
public
void
run
()
{
int
total_cache
;
do
{
try
{
Thread
.
sleep
(
LIFETIME
);
...
...
@@ -311,6 +310,7 @@ class KeepAliveKey {
/**
* Determine whether or not two objects of this type are equal
*/
@Override
public
boolean
equals
(
Object
obj
)
{
if
((
obj
instanceof
KeepAliveKey
)
==
false
)
return
false
;
...
...
@@ -325,6 +325,7 @@ class KeepAliveKey {
* The hashCode() for this object is the string hashCode() of
* concatenation of the protocol, host name and port.
*/
@Override
public
int
hashCode
()
{
String
str
=
protocol
+
host
+
port
;
return
this
.
obj
==
null
?
str
.
hashCode
()
:
...
...
jdk/src/share/classes/sun/net/www/http/KeepAliveStream.java
浏览文件 @
3b0a64c7
...
...
@@ -25,10 +25,7 @@
package
sun.net.www.http
;
import
java.net.URL
;
import
java.net.HttpURLConnection
;
import
java.io.*
;
import
java.util.StringTokenizer
;
import
sun.net.ProgressSource
;
import
sun.net.www.MeteredStream
;
...
...
@@ -50,9 +47,8 @@ class KeepAliveStream extends MeteredStream implements Hurryable {
// has this KeepAliveStream been put on the queue for asynchronous cleanup.
protected
boolean
queuedForCleanup
=
false
;
private
static
KeepAliveStreamCleaner
queue
=
new
KeepAliveStreamCleaner
();
private
static
Thread
cleanerThread
=
null
;
private
static
boolean
startCleanupThread
;
private
static
final
KeepAliveStreamCleaner
queue
=
new
KeepAliveStreamCleaner
();
private
static
Thread
cleanerThread
;
// null
/**
* Constructor
...
...
@@ -155,43 +151,46 @@ class KeepAliveStream extends MeteredStream implements Hurryable {
}
}
private
static
synchronized
void
queueForCleanup
(
KeepAliveCleanerEntry
kace
)
{
if
(
queue
!=
null
&&
!
kace
.
getQueuedForCleanup
())
{
if
(!
queue
.
offer
(
kace
))
{
kace
.
getHttpClient
().
closeServer
();
return
;
}
private
static
void
queueForCleanup
(
KeepAliveCleanerEntry
kace
)
{
synchronized
(
queue
)
{
if
(!
kace
.
getQueuedForCleanup
())
{
if
(!
queue
.
offer
(
kace
))
{
kace
.
getHttpClient
().
closeServer
();
return
;
}
kace
.
setQueuedForCleanup
();
}
kace
.
setQueuedForCleanup
();
queue
.
notifyAll
();
}
startCleanupThread
=
(
cleanerThread
==
null
);
if
(!
startCleanupThread
)
{
if
(!
cleanerThread
.
isAlive
())
{
startCleanupThread
=
true
;
boolean
startCleanupThread
=
(
cleanerThread
==
null
);
if
(!
startCleanupThread
)
{
if
(!
cleanerThread
.
isAlive
())
{
startCleanupThread
=
true
;
}
}
}
if
(
startCleanupThread
)
{
java
.
security
.
AccessController
.
doPrivileged
(
new
java
.
security
.
PrivilegedAction
<
Void
>()
{
public
Void
run
()
{
// We want to create the Keep-Alive-SocketCleaner in the
// system threadgroup
ThreadGroup
grp
=
Thread
.
currentThread
().
getThreadGroup
();
ThreadGroup
parent
=
null
;
while
((
parent
=
grp
.
getParent
())
!=
null
)
{
grp
=
parent
;
if
(
startCleanupThread
)
{
java
.
security
.
AccessController
.
doPrivileged
(
new
java
.
security
.
PrivilegedAction
<
Void
>()
{
public
Void
run
()
{
// We want to create the Keep-Alive-SocketCleaner in the
// system threadgroup
ThreadGroup
grp
=
Thread
.
currentThread
().
getThreadGroup
();
ThreadGroup
parent
=
null
;
while
((
parent
=
grp
.
getParent
())
!=
null
)
{
grp
=
parent
;
}
cleanerThread
=
new
Thread
(
grp
,
queue
,
"Keep-Alive-SocketCleaner"
);
cleanerThread
.
setDaemon
(
true
);
cleanerThread
.
setPriority
(
Thread
.
MAX_PRIORITY
-
2
);
cleanerThread
.
start
();
return
null
;
}
cleanerThread
=
new
Thread
(
grp
,
queue
,
"Keep-Alive-SocketCleaner"
);
cleanerThread
.
setDaemon
(
true
);
cleanerThread
.
setPriority
(
Thread
.
MAX_PRIORITY
-
2
);
cleanerThread
.
start
();
return
null
;
}
});
}
});
}
}
// queue
}
protected
long
remainingToRead
()
{
...
...
jdk/src/share/classes/sun/net/www/http/KeepAliveStreamCleaner.java
浏览文件 @
3b0a64c7
...
...
@@ -25,9 +25,8 @@
package
sun.net.www.http
;
import
java.util.concurrent.LinkedBlockingQueue
;
import
java.util.concurrent.TimeUnit
;
import
java.io.IOException
;
import
java.util.LinkedList
;
import
sun.net.NetProperties
;
import
java.security.AccessController
;
import
java.security.PrivilegedAction
;
...
...
@@ -44,7 +43,9 @@ import java.security.PrivilegedAction;
*/
@SuppressWarnings
(
"serial"
)
// never serialized
public
class
KeepAliveStreamCleaner
extends
LinkedBlockingQueue
<
KeepAliveCleanerEntry
>
implements
Runnable
class
KeepAliveStreamCleaner
extends
LinkedList
<
KeepAliveCleanerEntry
>
implements
Runnable
{
// maximum amount of remaining data that we will try to cleanup
protected
static
int
MAX_DATA_REMAINING
=
512
;
...
...
@@ -78,23 +79,39 @@ public class KeepAliveStreamCleaner extends LinkedBlockingQueue<KeepAliveCleaner
}
public
KeepAliveStreamCleaner
()
{
super
(
MAX_CAPACITY
);
}
@Override
public
boolean
offer
(
KeepAliveCleanerEntry
e
)
{
if
(
size
()
>=
MAX_CAPACITY
)
return
false
;
public
KeepAliveStreamCleaner
(
int
capacity
)
{
super
(
capacity
);
return
super
.
offer
(
e
);
}
@Override
public
void
run
()
{
KeepAliveCleanerEntry
kace
=
null
;
do
{
try
{
kace
=
poll
((
long
)
TIMEOUT
,
TimeUnit
.
MILLISECONDS
);
synchronized
(
this
)
{
long
before
=
System
.
currentTimeMillis
();
long
timeout
=
TIMEOUT
;
while
((
kace
=
poll
())
==
null
)
{
this
.
wait
(
timeout
);
long
after
=
System
.
currentTimeMillis
();
long
elapsed
=
after
-
before
;
if
(
elapsed
>
timeout
)
{
/* one last try */
kace
=
poll
();
break
;
}
before
=
after
;
timeout
-=
elapsed
;
}
}
if
(
kace
==
null
)
break
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录