public
class
Test {
public
static
void
main(String[] args) {
ExecutorService executorService =
new
ThreadPoolExecutor(
2
,
5
,
0
, TimeUnit.DAYS,
new
ArrayBlockingQueue<>(
2
),
new
ThreadFactory() {
@Override
public
Thread newThread(Runnable r) {
Thread thread =
new
Thread(r);
return
thread;
}
});
executorService.execute(() -> {
System.out.println(
"任务1@"
+ Thread.currentThread().getName());
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e) {
}
});
executorService.execute(() -> {
System.out.println(
"任务2@"
+ Thread.currentThread().getName());
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e) {
}
});
executorService.execute(() -> {
System.out.println(
"任务3@"
+ Thread.currentThread().getName());
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e) {
}
});
executorService.execute(() -> {
System.out.println(
"任务4@"
+ Thread.currentThread().getName());
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e) {
}
});
executorService.execute(() -> {
System.out.println(
"任务5@"
+ Thread.currentThread().getName());
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e) {
}
});
executorService.execute(() -> {
System.out.println(
"任务6@"
+ Thread.currentThread().getName());
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e) {
}
});
executorService.execute(() -> {
System.out.println(
"任务7@"
+ Thread.currentThread().getName());
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e) {
}
});
}
一个运行结果是
任务
1
@Thread
-
0
任务
2
@Thread
-
1
任务
5
@Thread
-
2
任务
6
@Thread
-
3
任务
7
@Thread
-
4
任务
3
@Thread
-
1
任务
4
@Thread
-
4
任务
5
,
6
,
7
比任务
3
,
4
运行的早,看起来
3
和
4
都是被加到队列里了,队列满了后,新进来的任务(
5
,
6
,
7
)是直接创建线程执行的,然后再从队列头开始执行