Java thread join all threads

Метод Thread.join() в Java

В этом руководстве мы обсудим различные методы join() в классе Thread . Мы подробно рассмотрим эти методы и некоторый пример кода.

Подобно методам wait() и notify() , join() является еще одним механизмом синхронизации между потоками.

Вы можете быстро просмотреть этот учебник , чтобы узнать больше о wait() и notify() .

2. Метод Thread.join () ​

Метод соединения определен в классе Thread :

 > `public final void join() throws InterruptedException` 

Ожидает завершения этого потока.

Когда мы вызываем метод join() для потока, вызывающий поток переходит в состояние ожидания. Он остается в состоянии ожидания до тех пор, пока указанный поток не завершится.

Мы можем увидеть это поведение в следующем коде:

 class SampleThread extends Thread    public int processingCount = 0;    SampleThread(int processingCount)    this.processingCount = processingCount;   LOGGER.info("Thread Created");   >    @Override   public void run()    LOGGER.info("Thread " + this.getName() + " started");   while (processingCount > 0)    try    Thread.sleep(1000);   > catch (InterruptedException e)    LOGGER.info("Thread " + this.getName() + " interrupted");   >   processingCount--;   >   LOGGER.info("Thread " + this.getName() + " exiting");   >   >    @Test   public void givenStartedThread_whenJoinCalled_waitsTillCompletion()   throws InterruptedException    Thread t2 = new SampleThread(1);   t2.start();   LOGGER.info("Invoking join");   t2.join();   LOGGER.info("Returned from join");   assertFalse(t2.isAlive());   > 

При выполнении кода следует ожидать результатов, подобных приведенным ниже:

INFO: Thread Created INFO: Invoking join INFO: Thread Thread-1 started INFO: Thread Thread-1 exiting INFO: Returned from join 

Метод join() также может возвращать значение, если указанный поток был прерван . В этом случае метод выдает InterruptedException .

Наконец, если указанный поток уже завершен или не был запущен, вызов метода join() немедленно возвращает значение .

 Thread t1 = new SampleThread(0);  t1.join(); //returns immediately 

3. Методы Thread.join() с тайм-аутом​

Метод join() будет продолжать ждать, если указанный поток заблокирован или его обработка занимает слишком много времени. Это может стать проблемой, поскольку вызывающий поток перестанет отвечать на запросы. Чтобы справиться с такими ситуациями, мы используем перегруженные версии метода join() , которые позволяют нам указать период ожидания.

Есть две временные версии , которые перегружают метод join() :

«public final void join(long millis ) throws InterruptedException Ожидает

самое большее миллисекунды миллисекунды, пока этот поток не умрет. Тайм-аут, равный 0, означает ожидание вечности».

«public final void join(long millis,int ` nanos ) выдает InterruptedException Ожидает`

самое большее миллисекунды плюс наносекунды , пока этот поток не умрет».

Мы можем использовать timed join() , как показано ниже:

 @Test   public void givenStartedThread_whenTimedJoinCalled_waitsUntilTimedout()   throws InterruptedException    Thread t3 = new SampleThread(10);   t3.start();   t3.join(1000);   assertTrue(t3.isAlive());   > 

В этом случае вызывающий поток ожидает завершения потока t3 примерно 1 секунду. Если поток t3 не завершится в этот период времени, метод join() возвращает управление вызывающему методу.

Timed join() зависит от времени ОС. Таким образом, мы не можем предполагать, что join() будет ждать ровно столько времени, сколько указано.

4. Методы Thread.join() и синхронизация​

В дополнение к ожиданию завершения вызов метода join() имеет эффект синхронизации. join() создает отношение « происходит до »:

«Все действия в потоке происходят до того, как какой-либо другой поток успешно вернется из функции join() в этом потоке».

Это означает, что когда поток t1 вызывает t2.join(), все изменения, сделанные t2, видны в t1 по возвращении. Однако, если мы не вызываем join() или не используем другие механизмы синхронизации, у нас нет никакой гарантии, что изменения в другом потоке будут видны текущему потоку, даже если другой поток завершился.

Следовательно, несмотря на то, что вызов метода join() для потока, находящегося в прекращенном состоянии, возвращается немедленно, в некоторых ситуациях нам все равно нужно вызывать его.

Мы можем увидеть пример неправильно синхронизированного кода ниже:

 SampleThread t4 = new SampleThread(10);  t4.start();   // not guaranteed to stop even if t4 finishes.   do     > while (t4.processingCount > 0); 

Чтобы правильно синхронизировать приведенный выше код, мы можем добавить timed t4.join() внутри цикла или использовать какой-либо другой механизм синхронизации.

5. Вывод​

Метод join() весьма полезен для синхронизации между потоками. В этой статье мы обсудили методы join() и их поведение. Мы также рассмотрели код, использующий метод join() .

Как всегда, полный исходный код можно найти на GitHub .

Источник

Java Thread.join() Examples to Wait for Another Thread

Twitter Facebook Google Pinterest

A quick guide to Thread.join() method in java with example. join() method Waits for this thread to die. This is mainly used to make the current thread to wait until another thread completes its execution.

1. Introduction

In this tutorial, We’ll learn how to use Thread.join() method in java. And also how to join the multiple threads at one place after completing the execution of all threads or one thread or any other threads.

join() method is part of the Thread class and it is part of the java.lang package. All the classes in java.lang package is not needed to add import statements. So, directly you can use it in the programs. join() is mainly used to sleep or wait the current thread until completion of another thread execution.

Similar to the wait() and notify(), join() also widely used in the thread intercommunication.

2. Thread.join() Syntax

below is the syntax from Thread API. join() method is an overloaded method so we should be careful which method should be used.

public final void join() throws InterruptedException public final void join(long millis) throws InterruptedException public final void join(long millis, int nanos) throws InterruptedException

Java 8 String API also has join() method.

3. Thread.join() Example To Wait For Another Thread Execution Completion

When a Thread.join() method is invoked then the current thread will go into the waiting state. Once invoked thread completes it’s execution then-current thread comes from out of waiting state.

For example. we have 3 threads such as t1, t2, t3. All will be created and called start() from main method. So, here the main() method creates the main thread. Now, our goal is to execute first t1, next t2, and last t3.

We can use join() method to wait main thread untill completion of the t1 thread execution. After that start t2 thread and next start t3 thread.

See the below example program that tries to print numbers by each thread as below.

thread 1 print from 1 to 10
thread 2 print from 11 to 20
thread 3 print from 21 to 30

package com.javaprogramto.threads; public class ThreadJoinExample < public static void main(String[] args) throws InterruptedException < System.out.println("main thread started execution. Current thread name : " + Thread.currentThread().getName()); PrintNumbers t1 = new PrintNumbers(1, 10); PrintNumbers t2 = new PrintNumbers(11, 20); PrintNumbers t3 = new PrintNumbers(21, 30); t1.start(); t1.join(); t2.start(); t2.join(); t3.start(); t3.join(); System.out.println("All threads completed excution."); System.out.println(Thread.currentThread().getName() + " complete execution"); >> class PrintNumbers extends Thread < private int start; private int end; public PrintNumbers(int start, int end) < this.start = start; this.end = end; >@Override public void run() < for (int i = start; i System.out.println(Thread.currentThread().getName() + " thread execution completed."); > >
main thread started execution. Current thread name : main Thread-0 - 1 Thread-0 - 2 Thread-0 - 3 Thread-0 - 4 Thread-0 - 5 Thread-0 - 6 Thread-0 - 7 Thread-0 - 8 Thread-0 - 9 Thread-0 - 10 Thread-0 thread execution completed. Thread-1 - 11 Thread-1 - 12 Thread-1 - 13 Thread-1 - 14 Thread-1 - 15 Thread-1 - 16 Thread-1 - 17 Thread-1 - 18 Thread-1 - 19 Thread-1 - 20 Thread-1 thread execution completed. Thread-2 - 21 Thread-2 - 22 Thread-2 - 23 Thread-2 - 24 Thread-2 - 25 Thread-2 - 26 Thread-2 - 27 Thread-2 - 28 Thread-2 - 29 Thread-2 - 30 Thread-2 thread execution completed. All threads completed excution. main complete execution

1. If the thread is interrupted then join() method may also return from the waiting state and throws an interrupted exception. But this happens in a rare case.

2. If the thread is not started and if we call join() method that does not make the main thread to wait. because the thread is not started so it will not wait and go to the next statement execution t2.start().

//t1.start(); t1.join(); t2.start(); t2.join(); //t3.start(); t3.join();

4. Thread.join(long) with timeout in milliseconds

This is also the most used method in some scenarios. If the main thread is calling t2.join() and the main thread is waiting to finish t2 execution. But, thread t2 execution takes more time than expected. So, we can specify the time x in milliseconds to join the method so that the main thread will wait for x seconds and then come out from the waiting state.

Syntax:

public final void join(long millis) throws InterruptedException

join(long timeout) Example:

t1.start(); t1.join(500); t2.start(); t2.join(500); t3.start(); t3.join(500);

5. Conclusion

In this article, We’ve seen how to use Thread.join() method with examples.

Thread join() Examples

Labels:

SHARE:

Twitter Facebook Google Pinterest

About Us

Java 8 Tutorial

  • Java 8 New Features
  • Java 8 Examples Programs Before and After Lambda
  • Java 8 Lambda Expressions (Complete Guide)
  • Java 8 Lambda Expressions Rules and Examples
  • Java 8 Accessing Variables from Lambda Expressions
  • Java 8 Method References
  • Java 8 Functional Interfaces
  • Java 8 — Base64
  • Java 8 Default and Static Methods In Interfaces
  • Java 8 Optional
  • Java 8 New Date Time API
  • Java 8 — Nashorn JavaScript

Java Threads Tutorial

Kotlin Conversions

Kotlin Programs

Java Conversions

  • Java 8 List To Map
  • Java 8 String To Date
  • Java 8 Array To List
  • Java 8 List To Array
  • Java 8 Any Primitive To String
  • Java 8 Iterable To Stream
  • Java 8 Stream To IntStream
  • String To Lowercase
  • InputStream To File
  • Primitive Array To List
  • Int To String Conversion
  • String To ArrayList

Java String API

  • charAt()
  • chars() — Java 9
  • codePointAt()
  • codePointCount()
  • codePoints() — Java 9
  • compareTo()
  • compareToIgnoreCase
  • concat()
  • contains()
  • contentEquals()
  • copyValueOf()
  • describeConstable() — Java 12
  • endsWith()
  • equals()
  • equalsIgnoreCase()
  • format()
  • getBytes()
  • getChars()
  • hashcode()
  • indent() — Java 12
  • indexOf()
  • intern()
  • isBlank() — java 11
  • isEmpty()
  • join()
  • lastIndexOf()
  • length()
  • lines()
  • matches()
  • offsetByCodePoints()
  • regionMatches()
  • repeat()
  • replaceFirst()
  • replace()
  • replaceAll()
  • resolveConstantDesc()
  • split()
  • strip(), stripLeading(), stripTrailing()
  • substring()
  • toCharArray()
  • toLowerCase()
  • transform() — Java 12
  • valueOf()

Spring Boot

$show=Java%20Programs

$show=Kotlin

accumulo,1,ActiveMQ,2,Adsense,1,API,37,ArrayList,18,Arrays,24,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,8,Collections,37,Collector,1,Command Line,1,Comparator,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,6,Core Java,149,Corona India,1,Create,2,CSS,1,Date,3,Date Time API,38,Dictionary,1,Difference,2,Download,1,Eclipse,3,Efficiently,1,Error,1,Errors,1,Exceptions,8,Fast,1,Files,17,Float,1,Font,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,9,Grant,1,Grep,1,HashMap,2,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Installation,1,Interview Questions,6,Iterate,2,Jackson API,3,Java,32,Java 10,1,Java 11,6,Java 12,5,Java 13,2,Java 14,2,Java 8,128,Java 8 Difference,2,Java 8 Stream Conversions,4,java 8 Stream Examples,12,Java 9,1,Java Conversions,14,Java Design Patterns,1,Java Files,1,Java Program,3,Java Programs,114,Java Spark,1,java.lang,4,java.util. function,1,JavaScript,1,jQuery,1,Kotlin,11,Kotlin Conversions,6,Kotlin Programs,10,Lambda,2,lang,29,Leap Year,1,live updates,1,LocalDate,1,Logging,1,Mac OS,3,Math,1,Matrix,6,Maven,1,Method References,1,Mockito,1,MongoDB,3,New Features,1,Operations,1,Optional,6,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,2,Sort,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Streams,31,String,61,String Programs,28,String Revese,1,StringBuilder,1,Swing,1,System,1,Tags,1,Threads,11,Tomcat,1,Tomcat 8,1,Troubleshoot,26,Unix,3,Updates,3,util,5,While Loop,1,

A quick guide to Thread.join() method in java with example. join() method Waits for this thread to die. This is mainly used to make the current thread to wait until another thread completes its execution.

Источник

Читайте также:  Python string split count
Оцените статью