Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
PubTools-tools
Project
Project
Details
Activity
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
liuxingyu
PubTools-tools
Commits
978a2515
Commit
978a2515
authored
Aug 10, 2023
by
lihao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提交多线程任务执行返回值
parent
05f0f0ca
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
33 additions
and
54 deletions
+33
-54
TaskExecutor.java
...utor-kit/src/main/java/com/mushiny/task/TaskExecutor.java
+5
-4
TaskTests.java
...xecutor-kit/src/test/java/com/mushiny/task/TaskTests.java
+28
-50
No files found.
task-executor-kit/src/main/java/com/mushiny/task/TaskExecutor.java
View file @
978a2515
...
@@ -2,6 +2,7 @@ package com.mushiny.task;
...
@@ -2,6 +2,7 @@ package com.mushiny.task;
import
java.util.Collection
;
import
java.util.Collection
;
import
java.util.concurrent.*
;
import
java.util.concurrent.*
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
java.util.function.BiFunction
;
import
java.util.function.BiFunction
;
/**
/**
...
@@ -46,17 +47,16 @@ public class TaskExecutor<T, U, R> {
...
@@ -46,17 +47,16 @@ public class TaskExecutor<T, U, R> {
/**
/**
* 执行函数
* 执行函数
*/
*/
public
void
execute
()
{
public
boolean
execute
()
{
TaskDefinition
<
T
,
U
,
R
>
t
=
this
.
task
;
TaskDefinition
<
T
,
U
,
R
>
t
=
this
.
task
;
Collection
<
T
>
data
=
t
.
getData
();
Collection
<
T
>
data
=
t
.
getData
();
countDownLatch
=
new
CountDownLatch
(
data
.
size
());
countDownLatch
=
new
CountDownLatch
(
data
.
size
());
AtomicInteger
failCount
=
new
AtomicInteger
();
data
.
forEach
(
d
->
pool
.
execute
(()
->
{
data
.
forEach
(
d
->
pool
.
execute
(()
->
{
try
{
try
{
Object
apply
=
t
.
getHandler
().
apply
(
d
,
t
.
getContext
());
Object
apply
=
t
.
getHandler
().
apply
(
d
,
t
.
getContext
());
System
.
out
.
println
(
"bi func result: "
+
apply
);
}
catch
(
Exception
ex
)
{
}
catch
(
Exception
ex
)
{
failCount
.
addAndGet
(
1
);
}
finally
{
}
finally
{
countDownLatch
.
countDown
();
countDownLatch
.
countDown
();
}
}
...
@@ -68,6 +68,7 @@ public class TaskExecutor<T, U, R> {
...
@@ -68,6 +68,7 @@ public class TaskExecutor<T, U, R> {
}
finally
{
}
finally
{
this
.
destroy
();
this
.
destroy
();
}
}
return
failCount
.
get
()
<=
0
;
}
}
/**
/**
...
...
task-executor-kit/src/test/java/com/mushiny/task/TaskTests.java
View file @
978a2515
package
com
.
mushiny
.
task
;
package
com
.
mushiny
.
task
;
import
org.junit.Assert
;
import
org.junit.Before
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
...
@@ -11,6 +14,7 @@ import java.util.concurrent.TimeUnit;
...
@@ -11,6 +14,7 @@ import java.util.concurrent.TimeUnit;
public
class
TaskTests
{
public
class
TaskTests
{
private
int
SLEEP_TIME
=
100
;
private
List
<
User
>
list
;
private
List
<
User
>
list
;
...
@@ -24,102 +28,76 @@ public class TaskTests {
...
@@ -24,102 +28,76 @@ public class TaskTests {
@Test
@Test
public
void
multiTaskLoopNoArgsTest
()
{
public
void
multiTaskLoopNoArgsTest
()
{
long
startTime
=
System
.
currentTimeMillis
();
TaskExecutor
<
User
,
User
,
String
>
executor
=
TaskPoolFactory
.
createExecutor
();
TaskExecutor
<
User
,
User
,
String
>
executor
=
TaskPoolFactory
.
createExecutor
();
TaskDefinition
<
User
,
User
,
String
>
taskDefinition
=
new
TaskDefinition
<>(
list
,
(
data
,
context
)
->
{
System
.
out
.
println
(
"enter bi func, current Thread:"
+
Thread
.
currentThread
());
System
.
out
.
println
(
data
);
data
.
setName
(
data
.
getName
()
+
"handle"
);
System
.
out
.
println
(
context
);
System
.
out
.
println
(
"exit bi func"
);
try
{
Thread
.
sleep
(
200
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
return
"success"
;
},
new
User
(
30
,
"leehyoo"
));
executor
.
init
((
data
,
context
)
->
{
executor
.
init
((
data
,
context
)
->
{
System
.
out
.
println
(
"enter bi func, current Thread:"
+
Thread
.
currentThread
());
System
.
out
.
println
(
data
);
data
.
setName
(
data
.
getName
()
+
"handle"
);
data
.
setName
(
data
.
getName
()
+
"handle"
);
System
.
out
.
println
(
context
);
System
.
out
.
println
(
"exit bi func"
);
try
{
try
{
Thread
.
sleep
(
200
);
Thread
.
sleep
(
SLEEP_TIME
);
}
catch
(
InterruptedException
e
)
{
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
return
"success"
;
return
"success"
;
},
list
,
new
User
(
30
,
"leehyoo"
));
},
list
,
new
User
(
30
,
"leehyoo"
));
executor
.
execute
();
boolean
result
=
executor
.
execute
();
Assert
.
assertTrue
(
result
);
System
.
out
.
println
(
"finally over. cost: "
+
(
System
.
currentTimeMillis
()
-
startTime
));
}
}
@Test
@Test
public
void
normalLoopTest
()
{
public
void
normalLoopTest
()
{
long
startTime
=
System
.
currentTimeMillis
();
User
context
=
new
User
(
30
,
"leehyoo"
);
User
context
=
new
User
(
30
,
"leehyoo"
);
list
.
forEach
(
data
->
{
list
.
forEach
(
data
->
{
System
.
out
.
println
(
"enter bi func, current Thread:"
+
Thread
.
currentThread
());
System
.
out
.
println
(
data
);
data
.
setName
(
data
.
getName
()
+
"handle"
);
data
.
setName
(
data
.
getName
()
+
"handle"
);
System
.
out
.
println
(
context
);
System
.
out
.
println
(
"exit bi func"
);
try
{
try
{
Thread
.
sleep
(
500
);
Thread
.
sleep
(
SLEEP_TIME
);
}
catch
(
InterruptedException
e
)
{
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
});
});
System
.
out
.
println
(
"finally over. cost: "
+
(
System
.
currentTimeMillis
()
-
startTime
));
}
}
@Test
@Test
public
void
multiTaskLoopWithArgsTest
()
{
public
void
multiTaskLoopWithArgsTest
()
{
long
startTime
=
System
.
currentTimeMillis
();
TaskExecutor
<
User
,
User
,
String
>
executor
=
TaskPoolFactory
.
createExecutor
(
new
ThreadPoolExecutor
(
5
,
6
,
TaskExecutor
<
User
,
User
,
String
>
executor
=
TaskPoolFactory
.
createExecutor
(
new
ThreadPoolExecutor
(
4
,
4
,
0L
,
TimeUnit
.
MILLISECONDS
,
new
LinkedBlockingQueue
<>()));
0L
,
TimeUnit
.
MILLISECONDS
,
new
LinkedBlockingQueue
<>()));
TaskDefinition
<
User
,
User
,
String
>
taskDefinition
=
new
TaskDefinition
<>(
list
,
(
data
,
context
)
->
{
executor
.
init
((
data
,
context
)
->
{
System
.
out
.
println
(
"enter bi func, current Thread:"
+
Thread
.
currentThread
());
System
.
out
.
println
(
data
);
data
.
setName
(
data
.
getName
()
+
"handle"
);
data
.
setName
(
data
.
getName
()
+
"handle"
);
System
.
out
.
println
(
context
);
System
.
out
.
println
(
"exit bi func"
);
try
{
try
{
Thread
.
sleep
(
200
);
Thread
.
sleep
(
SLEEP_TIME
);
}
catch
(
InterruptedException
e
)
{
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
return
"success"
;
return
"success"
;
},
new
User
(
30
,
"leehyoo"
));
},
list
,
new
User
(
30
,
"leehyoo"
));
boolean
result
=
executor
.
execute
();
Assert
.
assertTrue
(
result
);
}
@Test
public
void
failCaseTest
()
{
TaskExecutor
<
User
,
User
,
String
>
executor
=
TaskPoolFactory
.
createExecutor
();
executor
.
init
((
data
,
context
)
->
{
executor
.
init
((
data
,
context
)
->
{
System
.
out
.
println
(
"enter bi func, current Thread:"
+
Thread
.
currentThread
());
System
.
out
.
println
(
data
);
data
.
setName
(
data
.
getName
()
+
"handle"
);
data
.
setName
(
data
.
getName
()
+
"handle"
);
System
.
out
.
println
(
context
);
System
.
out
.
println
(
"exit bi func"
);
try
{
try
{
Thread
.
sleep
(
200
);
Thread
.
sleep
(
SLEEP_TIME
);
}
catch
(
InterruptedException
e
)
{
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
context
.
getAge
();
return
"success"
;
return
"success"
;
},
list
,
new
User
(
30
,
"leehyoo"
));
},
list
,
null
);
executor
.
execute
();
System
.
out
.
println
(
"finally over. cost: "
+
(
System
.
currentTimeMillis
()
-
startTime
));
boolean
result
=
executor
.
execute
();
Assert
.
assertFalse
(
result
);
}
}
}
}
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