Java中MultiThreading的替代方案

6 java multithreading

我有一个问题困扰我一段时间.例如,我有一个多线程服务器,当它收到请求时,它将此请求传递给处理程序,此处理程序将处理此请求.我们使服务器多线程的一个原因是:如果它不是多线程的,当服务器处理此请求时,在意义时间内,另一个请求到来,那么此请求将被丢弃,因为服务器现在不可用.

所以我想知道是否有多线程服务器的替代品,例如,我们可以为非多线程服务器创建一个队列?当它完成一个请求后,它可以从队列中获取另一个请求.

cor*_*iKa 1

您仍然可以使用带有多线程服务器的单线程引擎。

考虑以下框架 - 如果您有一个正在运行的引擎,它可以是完全单线程的,只需按照收到的顺序处理请求。这允许您在业务逻辑中使用非线程安全组件,并且您已经成功地将网络层与业务逻辑层分开!这是一个双赢的局面。

class Engine implements Runnable {

    private final Object requestLock = new Object();
    private List<Request> requests = new LinkedList<Request>();
    private boolean running = true;

    private Request nextRequest() {
        synchronized(requestLock) { return requests.poll(); }
    }

    /**
     * The engine is single threaded. It doesn't care about server connections
     */
    public void run() {
        while(running) {
            Request request = nextRequest();
            // handle your request as normal
            // also consider making a mechanism to send Responses
        }
    }
}
Run Code Online (Sandbox Code Playgroud)