Java 多线程读取文件并执行runnable 什么
我正在尝试构建一个工具,在完成一些字符串转换之后,它将读取文本文件并发布文本 怎样 该工具逐行读取文件并填充LinkedBlockingQueue。同时,我启动多个线程,然后每个线程从LBQ获取一条消息,进行一些处理并发布它们 主要 多线程发布服务器 问题 调用initMessagePublish First的目的是,发布者不必等待从文件中读取所有行,然后再开始发布。只要LBQ中有可用的内容,它就应该开始发布Java 多线程读取文件并执行runnable 什么,java,multithreading,blockingqueue,Java,Multithreading,Blockingqueue,我正在尝试构建一个工具,在完成一些字符串转换之后,它将读取文本文件并发布文本 怎样 该工具逐行读取文件并填充LinkedBlockingQueue。同时,我启动多个线程,然后每个线程从LBQ获取一条消息,进行一些处理并发布它们 主要 多线程发布服务器 问题 调用initMessagePublish First的目的是,发布者不必等待从文件中读取所有行,然后再开始发布。只要LBQ中有可用的内容,它就应该开始发布 但在当前的实现中,控件永远不会出现在initMessagePublish和start
但在当前的实现中,控件永远不会出现在initMessagePublish和start searchUsingScanner中。我如何解决这个问题?基本上,这两个方法应该并行执行。只需在主类中的新线程行5中启动messagePublisher:
new Thread(()->tool.initMessagePublish()).start();
它应该可以解决您的问题。您需要启动至少一个方法tool.initMessagePublish;以及使用扫描仪进行工具搜索;在一个新的线程中,我们做了类似的事情。在实际发布机制启动之前,为searchUsingScanner创建了一个runnable,并在initMessagePublish主体内调用了它。但这也很有效,而且是一个快速解决方案!
private void searchUsingScanner() {
Scanner scanner = null;
try {
scanner = new Scanner(new File(LOG_FILE_PATH));
while (scanner.hasNextLine()) {
String line = scanner.nextLine().trim();
if (StringUtils.isNotBlank(line)) {
lbQueue.offer(line);
}
}
} catch (Exception e) {
logger.error("Error while processing file: " + e.toString());
} finally {
try {
if (scanner != null) {
scanner.close();
}
// end thread execution
keepPublisherActive = false;
} catch (Exception e) {
logger.error("Exception while closing file scanner " + e.toString());
throw e;
}
}
}
private void initMessagePublish() throws InterruptedException {
ExecutorService service = Executors.newFixedThreadPool(6);
try {
while (keepPublisherActive || lbQueue.getSize() > 0) {
service.execute(messagePublisher); // messagePublisher implements Runnable
}
} catch (Exception ex) {
logger.error("Multi threaded message publish failed " + ex.toString());
throw ex;
} finally {
service.shutdown();
}
}
new Thread(()->tool.initMessagePublish()).start();