Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
JSH ERP
Commits
760a8b15
Commit
760a8b15
authored
Apr 02, 2020
by
季圣华
Browse files
增加-线程池测试案例
parent
ed4dab33
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/test/java/ThreadPoolTest.java
0 → 100644
View file @
760a8b15
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.concurrent.Callable
;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.Future
;
/**
* 线程池测试案例
*/
public
class
ThreadPoolTest
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
// 开始时间
long
start
=
System
.
currentTimeMillis
();
List
<
String
>
list
=
new
ArrayList
<
String
>();
for
(
int
i
=
1
;
i
<=
3000
;
i
++)
{
list
.
add
(
i
+
""
);
}
// 每500条数据开启一条线程
int
threadSize
=
500
;
// 总数据条数
int
dataSize
=
list
.
size
();
// 线程数
int
threadNum
=
dataSize
/
threadSize
+
1
;
// 定义标记,过滤threadNum为整数
boolean
special
=
dataSize
%
threadSize
==
0
;
// 创建一个线程池
ExecutorService
exec
=
Executors
.
newFixedThreadPool
(
threadNum
);
// 定义一个任务集合
List
<
Callable
<
Integer
>>
tasks
=
new
ArrayList
<
Callable
<
Integer
>>();
Callable
<
Integer
>
task
=
null
;
List
<
String
>
cutList
=
null
;
// 确定每条线程的数据
for
(
int
i
=
0
;
i
<
threadNum
;
i
++)
{
if
(
i
==
threadNum
-
1
)
{
if
(
special
)
{
break
;
}
cutList
=
list
.
subList
(
threadSize
*
i
,
dataSize
);
}
else
{
cutList
=
list
.
subList
(
threadSize
*
i
,
threadSize
*
(
i
+
1
));
}
final
List
<
String
>
listStr
=
cutList
;
task
=
new
Callable
<
Integer
>()
{
@Override
public
Integer
call
()
throws
Exception
{
System
.
out
.
println
(
Thread
.
currentThread
().
getName
()
+
"线程:"
+
listStr
);
return
1
;
}
};
// 这里提交的任务容器列表和返回的Future列表存在顺序对应的关系
tasks
.
add
(
task
);
}
List
<
Future
<
Integer
>>
results
=
exec
.
invokeAll
(
tasks
);
for
(
Future
<
Integer
>
future
:
results
)
{
System
.
out
.
println
(
future
.
get
());
}
// 关闭线程池
exec
.
shutdown
();
System
.
out
.
println
(
"线程任务执行结束"
);
System
.
err
.
println
(
"执行任务消耗了 :"
+
(
System
.
currentTimeMillis
()
-
start
)
+
"毫秒"
);
}
}
Write
Preview
Supports
Markdown
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