как работает интерфейс исполнителя в java? - PullRequest
0 голосов
/ 17 апреля 2020

Я изучаю книгу о java сокетах, глава, которую я только что прочитал, касается нескольких соединений, то есть сервера, который подключен к нескольким клиентам одновременно через потоки. Объясните два подхода к созданию этих соединений: 1) создайте новый поток для каждого клиента. 2) использовать конечное число N потоков для одновременной обработки запросов N клиентов и ставить в очередь остальные. Затем он представил интерфейс Executor, который из того, что я понимаю, является лучшим подходом, поскольку он повторно использует потоки, которые мы уже использовали, но которые мы больше не используем (возможно, я неправильно понял, так как я читаю его в Engli sh и я не понимаю это хорошо). Итак, я сделал пример в java:

public class Server{
    public static void main(String[] args){
        ServerSocket ServSock=new ServerSocket(6666);
        Executor service=Executors.newCachedThreadPool();
        while(true){
            Socket ClntSock=ServSock.accept();
            service.execute(new EchoProtocol(ClntSock));
        }
    }
}

EchoProtocol. java - это класс, расширяющий Thread, клиент отправляет строку на сервер, а сервер отправляет ее так же, как и клиент. Чтобы проверить, что он повторно использовал потоки, я помещаю это в конструктор:

System.out.println(getName());

Но каждый раз, когда я запускаю новый клиент, постоянно увеличивающийся индекс Thread-0 Thread-1 Thread-2 ... is напечатано, даже если я закончил некоторые клиенты. Так что не используйте темы? Что я не понимаю?

1 Ответ

0 голосов
/ 18 апреля 2020

Я решаю с помощью класса ExecutorService

...