Java线程池 - Callable和Runnable封装

  • 对Callable和Runnable封装,提供自定义执行接口
  • 补充异常处理

Runnable

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@Slf4j
public class CustomRunnable implements Runnable {

private Runnable runnable;

public CustomRunnable() {

}

public CustomRunnable(final Runnable runnable) {
this.runnable = runnable;
}

private String taskId;

public void setTaskId(String taskId) {
this.taskId = taskId;
}

@Override
public void run() {
if (runnable == null) {
return;
}

try {
runnable.run();
} catch (Exception e) {
log.error("任务:{},错误栈:{}", taskId, e);
e.printStackTrace();
}

}

@Override
public String toString() {
return Thread.currentThread().getName();
}
}

Callable

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@Slf4j
public class CustomCallable<T> implements Callable {

Callable<T> callable;

public CustomCallable(Callable<T> callable) {
this.callable = callable;
}

private String taskId;

public void setTaskId(String taskId) {
this.taskId = taskId;
}

@Override
public T call() throws Exception {
if (callable == null) {
return null;
}

try {
return callable.call();
} catch (Exception e) {
log.error("任务:{},错误栈:{}", taskId, e);
e.printStackTrace();
}
return null;
}

@Override
public String toString() {
return Thread.currentThread().getName();
}
}

区别

模块 Runnable Callable
返回值
返回对象 Future
执行方法 run call
执行超时 get(long timeout,TimeUtil unit)
获取结果 get、isDone
异常处理 throws Exception
线程阻塞 是,LockSupport.park
------ 本文结束------

本文标题:Java线程池 - Callable和Runnable封装

文章作者:Perkins

发布时间:2019年08月16日

原始链接:https://perkins4j2.github.io/posts/9431/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。