多个PostConstruct使用,相互之间有依赖关系
- 糟糕代码(强依赖于代码书写顺序)
@PostConstruct
public void init() {
Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
@Override
public Thread newThread(@NotNull Runnable r) {
Thread thread = new Thread(r);
thread.setDaemon(true);
return thread;
}
}).scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
...
}
}, 0, 2, TimeUnit.MINUTES);
}
@PostConstruct
public void refreshA(){
...
}
@PostConstruct
public void refreshB(){
...
}
@PostConstruct
pubic void refreshC(){
...
}
- 正确姿势code
@PostConstruct
public void init(){
...
refreshA();
refreshB();
refreshC();
}
@PostConstruct
public void refreshA(){
...
}
@PostConstruct
public void refreshB(){
...
}
@PostConstruct
public void refreshC(){
...
}
while循环问题
- 糟糕实现(可能造成死循环)
@AutoWired
private LinkedBlockingQueue<Task> queue;
// 伪代码如下
public void method(){
while(true){
Task task = queue.poll();
// 耗内存操作
...
if(null != task){
// do someThing
}
}
}
当 task 为空时,就一直死循环
正确姿势
while(true){
Task task = queue.poll();
// 耗内存操作
...
if(null == task){
break;
}
// do someThing
}