В приведенном выше примере метод соединения класса Thread используется много раз. Я думаю, вы уже догадались, в чем заключается функция метода соединения. Да, функция метода соединения — превратить поток асинхронного выполнения в синхронное выполнение. То есть, когда вызывается метод запуска экземпляра потока, этот метод немедленно возвращает значение. Если вам нужно использовать значение, вычисленное этим потоком после вызова метода запуска, вы должны использовать метод соединения. Если вы не используете метод соединения, нет никакой гарантии, что при выполнении оператора, следующего за методом start, поток будет выполнен. После использования метода соединения программа не продолжит выполнение до тех пор, пока этот поток не завершится. Следующий код демонстрирует использование соединения.
Скопируйте код кода следующим образом:
пакет мифрид;
публичный класс JoinThread расширяет поток
{
общественный статический int n = 0;
статическая синхронизация void inc()
{
н++;
}
публичный недействительный запуск()
{
для (int я = 0; я <10; я++)
пытаться
{
вкл();
Sleep(3); // Чтобы сделать результаты выполнения более случайными, задержите 3 миллисекунды;
}
поймать (Исключение e)
{
}
}
public static void main(String[] args) выдает исключение
{
Потоки [] = новая тема [100];
for (int i = 0; i < threads.length; i++) // Создаём 100 потоков
потоки [я] = новый JoinThread();
for (int i = 0; i < threads.length; i++) // Запускаем 100 только что созданных потоков
потоки[i].start();
если (длина аргумента > 0)
for (int i = 0; i < threads.length; i++) // Продолжаем после выполнения всех 100 потоков
потоки[i].join();
System.out.println("n=" + JoinThread.n);
}
}
В процедуре 2-8 создается 100 потоков, и каждый поток увеличивает статическую переменную n на 10. Если n выводится после выполнения всех 100 потоков, значение n должно быть 1000.
1. Тест 1
Используйте следующую команду для запуска указанной выше программы:
Скопируйте код кода следующим образом:
Java Mythread.JoinThread
Результаты запуска программы следующие:
Скопируйте код кода следующим образом:
п=442
Этот результат выполнения может иметь некоторые различия в разных средах выполнения, но обычно n не будет равно 1000. Из приведенных выше результатов мы можем быть уверены, что n выводится до того, как будут выполнены все 100 потоков.
2. Тест 2
Запустите приведенный выше код, используя следующую команду:
В приведенной выше командной строке есть соединение параметров. Фактически, в командной строке можно использовать любой параметр, если здесь есть один параметр. Соединение используется только для указания того, что метод соединения используется для синхронизации выполнения. эти 100 тем.
Результаты запуска программы следующие:
Скопируйте код кода следующим образом:
п=1000
Независимо от того, в какой операционной среде вы запустите приведенную выше команду, вы получите тот же результат: n=1000. Это полностью демонстрирует, что все 100 потоков должны быть выполнены, следовательно, n должно быть равно 1000.