Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
Y
yzg-util
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
YZG
yzg-util
Commits
6b71ce70
Commit
6b71ce70
authored
Sep 19, 2022
by
yanzg
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
升级新版本
parent
8cd1fa39
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
81 additions
and
14 deletions
+81
-14
YzgTimeout.java
...src/main/java/com/yanzuoguang/util/helper/YzgTimeout.java
+81
-14
No files found.
yzg-util-base/src/main/java/com/yanzuoguang/util/helper/YzgTimeout.java
View file @
6b71ce70
...
@@ -2,8 +2,12 @@ package com.yanzuoguang.util.helper;
...
@@ -2,8 +2,12 @@ package com.yanzuoguang.util.helper;
import
com.yanzuoguang.util.log.Log
;
import
com.yanzuoguang.util.log.Log
;
import
com.yanzuoguang.util.thread.ThreadHelper
;
import
com.yanzuoguang.util.thread.ThreadHelper
;
import
com.yanzuoguang.util.vo.Ref
;
import
java.util.Queue
;
import
java.util.concurrent.ArrayBlockingQueue
;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.ThreadPoolExecutor
;
import
java.util.concurrent.TimeUnit
;
import
java.util.function.Consumer
;
import
java.util.function.Consumer
;
/**
/**
...
@@ -15,7 +19,9 @@ public class YzgTimeout {
...
@@ -15,7 +19,9 @@ public class YzgTimeout {
public
static
final
int
TIME_OUT_DEFAULT
=
15
*
1000
;
public
static
final
int
TIME_OUT_DEFAULT
=
15
*
1000
;
public
static
final
int
TIME_OUT_TIP
=
10
*
1000
;
public
static
final
int
TIME_OUT_TIP
=
10
*
1000
;
public
static
final
int
TIME_OUT_UNIT
=
10
;
private
static
ExecutorService
executorService
;
private
static
final
Queue
<
TimeInfo
>
queueInfos
=
new
ArrayBlockingQueue
<>(
500
);
/**
/**
* 超时监控
* 超时监控
...
@@ -36,7 +42,7 @@ public class YzgTimeout {
...
@@ -36,7 +42,7 @@ public class YzgTimeout {
* @param runnable 运行函数
* @param runnable 运行函数
*/
*/
public
static
void
timeOut
(
Class
<?>
cls
,
String
message
,
Runnable
runnable
,
Consumer
<
Long
>
consumer
)
{
public
static
void
timeOut
(
Class
<?>
cls
,
String
message
,
Runnable
runnable
,
Consumer
<
Long
>
consumer
)
{
timeHeart
(
TIME_OUT_DEFAULT
,
TIME_OUT_
UNIT
,
TIME_OUT_
TIP
,
runnable
,
(
time
)
->
{
timeHeart
(
TIME_OUT_DEFAULT
,
TIME_OUT_TIP
,
runnable
,
(
time
)
->
{
Log
.
error
(
cls
,
"%s超时,已经执行%d豪秒,正在等待执行完成"
,
message
,
time
);
Log
.
error
(
cls
,
"%s超时,已经执行%d豪秒,正在等待执行完成"
,
message
,
time
);
if
(
consumer
!=
null
)
{
if
(
consumer
!=
null
)
{
consumer
.
accept
(
time
);
consumer
.
accept
(
time
);
...
@@ -51,7 +57,7 @@ public class YzgTimeout {
...
@@ -51,7 +57,7 @@ public class YzgTimeout {
* @param heart 心跳函数
* @param heart 心跳函数
*/
*/
public
static
void
timeHeart
(
Runnable
runnable
,
YzgTimeoutHeart
heart
)
{
public
static
void
timeHeart
(
Runnable
runnable
,
YzgTimeoutHeart
heart
)
{
timeHeart
(
1000
,
1000
,
10
,
runnable
,
heart
);
timeHeart
(
TIME_OUT_DEFAULT
,
TIME_OUT_TIP
,
runnable
,
heart
);
}
}
/**
/**
...
@@ -59,13 +65,35 @@ public class YzgTimeout {
...
@@ -59,13 +65,35 @@ public class YzgTimeout {
*
*
* @param tipOutDefault 默认超时时间
* @param tipOutDefault 默认超时时间
* @param timeOutTip 超时心跳间隔
* @param timeOutTip 超时心跳间隔
* @param tipUnit 监听间隔时间(监听任务完成间隔时间)
* @param runnable 运行函数
* @param runnable 运行函数
* @param heart 心跳函数
* @param heart 心跳函数
*/
*/
public
static
void
timeHeart
(
int
tipOutDefault
,
int
timeOutTip
,
int
tipUnit
,
public
static
void
timeHeart
(
int
tipOutDefault
,
int
timeOutTip
,
Runnable
runnable
,
YzgTimeoutHeart
heart
)
{
Runnable
runnable
,
YzgTimeoutHeart
heart
)
{
final
Ref
<
Boolean
>
isRun
=
new
Ref
<>(
false
);
TimeInfo
timeInfo
=
getTimeInfo
(
tipOutDefault
,
timeOutTip
,
heart
);
try
{
runnable
.
run
();
}
finally
{
synchronized
(
timeInfo
)
{
timeInfo
.
setRun
(
true
);
}
}
}
private
static
TimeInfo
getTimeInfo
(
int
tipOutDefault
,
int
timeOutTip
,
YzgTimeoutHeart
heart
)
{
init
();
TimeInfo
timeInfo
=
new
TimeInfo
(
tipOutDefault
,
timeOutTip
,
heart
);
queueInfos
.
add
(
timeInfo
);
return
timeInfo
;
}
private
static
void
init
()
{
synchronized
(
YzgTimeout
.
class
)
{
if
(
executorService
==
null
)
{
executorService
=
new
ThreadPoolExecutor
(
1
,
10
,
1000
,
TimeUnit
.
MILLISECONDS
,
new
ArrayBlockingQueue
<>(
10
));
}
}
ThreadHelper
.
runThread
(()
->
{
ThreadHelper
.
runThread
(()
->
{
try
{
try
{
long
timeMax
=
tipOutDefault
;
long
timeMax
=
tipOutDefault
;
...
@@ -83,12 +111,51 @@ public class YzgTimeout {
...
@@ -83,12 +111,51 @@ public class YzgTimeout {
ex
.
printStackTrace
();
ex
.
printStackTrace
();
}
}
});
});
try
{
}
runnable
.
run
();
}
}
finally
{
synchronized
(
isRun
)
{
class
TimeInfo
{
isRun
.
value
=
true
;
}
private
int
timeOutDefault
;
}
private
int
timeOutTip
;
private
YzgTimeoutHeart
heart
;
private
boolean
isRun
;
public
TimeInfo
(
int
timeOutDefault
,
int
timeOutTip
,
YzgTimeoutHeart
heart
)
{
this
.
timeOutDefault
=
timeOutDefault
;
this
.
timeOutTip
=
timeOutTip
;
this
.
heart
=
heart
;
}
public
int
getTimeOutDefault
()
{
return
timeOutDefault
;
}
public
void
setTimeOutDefault
(
int
timeOutDefault
)
{
this
.
timeOutDefault
=
timeOutDefault
;
}
public
int
getTimeOutTip
()
{
return
timeOutTip
;
}
public
void
setTimeOutTip
(
int
timeOutTip
)
{
this
.
timeOutTip
=
timeOutTip
;
}
public
YzgTimeoutHeart
getHeart
()
{
return
heart
;
}
public
void
setHeart
(
YzgTimeoutHeart
heart
)
{
this
.
heart
=
heart
;
}
public
boolean
isRun
()
{
return
isRun
;
}
public
void
setRun
(
boolean
run
)
{
isRun
=
run
;
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment