内执行的线程我有一个与while(true)
循环总是一个线程,基本上它所做的就是Runnable对象添加到一个执行者。执行人不是从主线程
OrderExecutionThread:
public class OrderExecutionThread extends Thread implements Runnable {
final private static int ORDER_EXEC_THREADS_NUMBER = 10;
private boolean running = true;
private boolean flag = true;
private List<Order> firstSellsList = new ArrayList<>();
private List<Order> secondSellsList = new ArrayList<>();
private ManagedDataSource managedDataSource;
private ExecutorService executorService;
public OrderExecutionThread(ManagedDataSource managedDataSource) {
this.managedDataSource = managedDataSource;
this.executorService = Executors.newFixedThreadPool(ORDER_EXEC_THREADS_NUMBER);
}
@Override
public void run() {
while (running) {
if (!firstSellsList.isEmpty() && !firstBuysList.isEmpty()) {
initAndRunExecution(firstBuysList.get(0), firstSellsList.get(0));
}
}
private void initAndRunExecution(Order buy, Order sell) {
executorService.submit(new OrderExecution(buy, sell, managedDataSource));
}
}
我跑这个线程通过我的主类这样做:
new Thread(orderExecutionThread).start();
假设执行人执行OrderExecution runnable
对象,做到这一点:
@Override
public void run() {
try {
connection = managedDataSource.getConnection();
makeExecution(sell, buy);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (!connection.isClosed())
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
我知道这两个清单都不是空的,initAndRunExecution
被调用,但是为了执行run方法不会被调用....
尝试'firstBuysList.remove(0)'代替'firstBuysList.get(0)'。 firstSells一样...'get'不会删除元素。所以你处于无限循环中,以非常高的频率提交相同的两个元素。所以我怀疑你的Executor线程根本就不会被调度。 – Fildor
@Fildor,删除不工作以及... – kitsuneFox
哦,我看得好。删除了我的评论。你如何填写这些列表? – JIV