Чтобы улучшить стабильность производительности большого объема параллелизма в проекте, пулы потоков часто используются для выполнения многопоточных асинхронных операций. Есть два типа многопоточных. Один из них заключается в реализации запускаемого интерфейса, который не имеет возврата, а другой - реализовать подводной интерфейс, который имеет возвратное значение.
Когда один из потоков перешел время, он не должен теоретически влиять на результаты выполнения других потоков, но возникающие проблемы в проекте указывают на то, что один поток блокируется и интерфейсы, возвращаемые другими потоками, пусты. На самом деле, это очень простой вопрос, но поскольку я впервые столкнулся с ним, я все еще думал об этом некоторое время. Это очень просто, это из -за линии блокировки
Процесс не выпущен, и как только сумма параллелизма будет большой, количество пулов резьбов будет полным, поэтому другие потоки находятся в состоянии ожидания.
Прилагается код отладки, который я написал сам. Когда я не могу придумать проблемы, я смоделировал ее, и, возможно, проблема выйдет.
Import java.util.concurrent.callable; import java.util.concurrent.executionexception; import java.util.concurrent.executorservice; импорт java.util.concurrent.executors; import java.util.concurrent.future; import.util.concurrent.uthore.Tior java.util.concurrent.timeoutexception; public class futuretest {public static void main (string [] args) бросает прерывания, выполнение, выполнение, экипсация, timeoutexception {final expertorservice exec = expertions.newfixedthreadpool (1); Callable <string> call = new Callable <string> () {public String Call () Throws refruptExexception {// Начать выполнение трудоемких операций Thread.sleep (1000 * 2); вернуть "1 выполнение потока завершено."; }}; Callable <string> call2 = new Callable <string> () {public String call () выбрасывает exception {// Начнем выполнять операцию по трудоустройству // thread.sleep (1000 * 5); вернуть "2 Ниже выполнение поток завершено."; }}; Callable <string> call3 = new Callable <string> () {public String call () выбрасывает exception {// Начнем выполнять операцию по трудоустройству // thread.sleep (1000 * 5); вернуть "3 Ниже заполнения завершается."; }}; Будущее <string> future = exec.submit (call); Будущее <string> future3 = exec.submit (call3); Будущее <string> future2 = exec.submit (call2); String obj = ""; String obj2 = ""; String obj3 = ""; try {obj = future.get (500, timeUnit.milliseconds); // Установите время ожидания обработки задачи на} // 1 второй улов (Exception e) {System.out.println («Тайм -аут обработки ....»); e.printstacktrace (); } try {obj3 = future3.get (3000, timeUnit.milliseconds); // Установите время ожидания обработки задачи на} // 1 второй захват (Exception e) {System.out.println ("Timeout Timeout обработки ......"); e.printstacktrace (); } try {obj2 = future2.get (3000, timeUnit.milliseconds);} catch (Exception e) {System.out.println ("Тайм -аут обработки ...."); e.printstacktrace (); } System.out.println ("3 Задача возвращается успешно:" + obj3); System.out.println ("2 Задача успешно возвращается:" + obj2); System.out.println ("1 задача возвращается успешно:" + obj); exec.shutdown (); }}Вышесказанное-краткое обсуждение исключений в обслуживании, вызванных асинхронным временным интервалом в Java. Я надеюсь, что все будут поддерживать wulin.com больше ~