Режим потока в зал (эта работа остается для вас)
Когда вы очень заняты, есть курьера внизу компании, поэтому вы доверяете своему коллеге помочь вам получить курьера, чтобы вы могли продолжать выполнять свою работу
В режиме потока в MESSAGE в конце сообщений делегат и конец выполнения являются разными потоками. В конце сообщества делегат расскажет о конце выполнения, и эта работа будет передана вам.
Класс хоста:
Класс, который создает поток для запросов, в основном открывает новый поток, вызов ручкой помощника и передачей текста для печати.
Общедоступный хост класса {private final helper helper = new helper (); public void запрос (окончательный count, final char c) {system.out.println ("request start"); new Thread () {public void run () {helper.handle (count, c);}. start (); System.out.printВспомогательный класс:
Обеспечивает функцию отображения символов, медленный метод имитирует время печати
Открытый класс Helper {public void handle (int count, char c) {system.out.println ("метод обработки метода"); for (int i = 0; i <count; i ++) {медленно (); System.out.print (c);} System.out.println (""); System.out.print. {Thread.sleep (100);} catch (прерывание Exception e) {// todo Автогенерированный Catch Blocke.printstackTrace ();}}}Основной класс:
Создайте экземпляр хоста и вызовите метод запроса
public static void main (string [] args) {system.out.println ("main begin"); host host = new host (); host.request (10, 'a'); host.request (20, 'b'); host.request (30, 'c'); System.out.println ("main end");};Результаты теста:
Главное начало
Метод запроса начался
Конец метода запроса
Метод запроса начался
Конец метода запроса
Метод запроса начался
Конец метода запроса
Основной конец
Запустите метод ручки
Запустите метод ручки
Запустите метод ручки
Bacbacbacbacbacbacbacbacbacba
Метод окончания ручки
CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB
Метод окончания ручки
Cccccccccccc
Метод окончания ручки
Из результатов операции мы видим, что метод запроса не ждет выполнения метода обработки до выполнения, но вызывает метод обработки и возвращается в метод запроса до завершения выполнения. Следовательно, он эквивалентен методу запроса, передающему работу по печати определенного количества символов, которые будут выполнены в методе обработки, и метод запроса может выполнять другие операторы в глупых методе, не ожидая завершения метода грандиозного отвода. Это также говорит нам о том, что когда некоторые работы занимают много времени, в этом режиме можно запустить новые потоки для выполнения обработки. Этот режим может быть применен к серверу, что может сократить время отклика сервера.
Объясните процесс и поток:
Самая большая разница между потоками и процессами заключается в том, сосуществует ли память.
Каждый процесс имеет свое собственное независимое пространство памяти. Процесс не может читать и записать память других процессов без разрешения. Поскольку пространство памяти процессов не зависит друг от друга, процесс не должен беспокоиться о том, чтобы быть разрушенным другими процессами.
Поток может сосуществовать. Один поток записывает контент в экземпляр, а другие потоки могут читать содержимое экземпляра. Поскольку несколько потоков могут получить доступ к одному и тому же экземпляру, мы должны убедиться, что он правильно выполняет Mutex.
Оптимизация дизайна хоста:
1. Разработайте класс хоста, используя интерфейс Threadfactory в пакете java.util.concurrent
Общедоступный класс host {public void (окончательный count, final char c) {System.out.println ("Метод запроса запускается"); threadfactory.newthread (new Runnable () {@OverridePublic void run () {// todo Auto-генерируемый метод StubHelper.handle (count, c);}}). заканчивается ");}}Соответствующий объект экземпляра хоста:
Хост хост = новый хост (recement.defaultthreadfactory ());
Преимущество этого дизайна состоит в том, что исходный код экземпляра, созданный с новым, зависит от класса Java.lang.Thread, и не может контролировать часть потока создания и менее повторно используется. Если ThreadFactory используется для сохранения объектов соответствующего класса и вызовы метода NewThread для создания нового потока, создается создание потока. Это больше не зависит от класса потока, но зависит от объекта Threadfactory, передаваемого в конструкторе, который реализует детали управления созданием потоков.
Попробуйте класс хоста, используя интерфейс java.util.concurrent.executor:
Предыдущий интерфейс Threadfactory скрывает детали создания потока, но не скрывает операции создания потока. Если используется интерфейс исполнителя, операции создания потока также будут скрыты.
Общедоступный Host {Private Final Helper Helper = new Helper (); Private Final Final Executor; public host (исполнитель исполнителя) {this.executor = Executor;} public void-запрос (окончательный счет int, окончательный char c) {System.out.println («метод запроса начался»); Executor.execute (newnable () {@Overridep void void void void void void void (// /- Метод stubhelper.handle (count, c);}}); System.out.println ("Метод End");}}Создано с использованием класса java.util.concurrent.scheduledexecutorservice, который может реализовать запланированную операцию
Общедоступный хост класса {private final helper helper = new helper (); private final finaleexecutorservice shaduledexecutorservice; public host (predulledexecutorservice shaduledexecutorservice) {this.scheduleedexecutorservice = preduledexecutorservice;} public stecker waod vestive specile (final introud {sytry.ous.out. начало "); warededExecutorservice.schedule (new Runnable () {@OverridePublic void run () {// todo автоматически сгенерированный метод.Проверьте основную запись функции:
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);Host host = new Host(scheduledExecutorService);try {host.request(10, 'A');host.request(20, 'B');host.request(30, 'C');} catch (Exception e) {// TODO Auto-generated catch blocke.printstacktrace ();} наконец {warededexecutorservice.shutdown (); System.out.println ("Main End");}Суммировать
Роль клиента вызывает метод запроса роли хоста, и фактическая обработка запроса передается вспомогательному ручке для выполнения. Однако, если клиент вызывает метод обработки непосредственно из запроса, он не может быть возвращен из метода ручки, пока фактическая операция не закончится. Это снизит производительность отклика запроса. Таким образом, роль хоста запустит новый поток, используемый для обработки запроса из роли клиента, и позволить потоку вызовать ручку, чтобы поток, выполняющий запрос, может немедленно вернуться из ручки. Это режим потока за Message.