如何在Java中执行异步线程?

时间:2018-06-26 18:09:53

标签: multithreading asynchronous collections thread-safety java-threads

我正在进行一个编码练习,其中我必须在Java中创建一个日志记录框架。 记录步骤类似于Log4J,即1.消息由处理器处理。 2.消息由附加程序附加到IO或文件或服务器中。

要求是类应同时处理多个线程(异步方式)。该类有两种方法log()–用于记录日志,shutdown()–用于终止。 我有message_processor和appender的对象,但是此过程应以FIFO方式完成。

我的工作是在调​​用log()时,message_processor将处理该消息,该过程非常耗时,然后将已处理的消息附加并记录下来。

我有一个粗略的想法,那就是,我必须创建一个静态数据结构,在其中添加线程及其键。每当调用log()时,我都会继续添加。 添加到我的数据结构后,我将启动线程并继续检查线程是否已完成。 当线程完成并且完成的线程没有任何前任线程时,我将其附加,否则我将等待前任任务完成。如果线程已完成,我必须维护一个标志。

Log()将产生线程以进行消息处理,并等待线程完成其任务,并且当线程完成时,log()将按顺序附加消息。 数据结构将由多个线程同时读取和写入。

  1. 我的问题是,应该使用哪种数据结构来实现Java中的这种功能。对于该标志,我应该创建一个实现Runnable接口的Java类,或者是否存在具有这种功能的数据结构?

  2. 实现异步线程是否有效?

欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

我认为,您应该使用由框架提供的并发数据结构,而不是执行您的实现。