Java >> Java tutorial >  >> Tag >> synchronized

Hvad er forskellen mellem Thread.join og Synchronized?

Thread.join() venter på, at tråden er helt færdig, mens en synchronized blok kan bruges til at forhindre to tråde i at udføre det samme stykke kode på samme tid.

Det er svært at rådgive, hvornår man skal bruge den ene frem for den anden generelt, da de tjener forskellige formål. Det er sjældent at finde et eksempel, såsom din kode, hvor forskellen mellem de to er minimal.

Når det er sagt, er der i dit første eksempel ingen garanti for, at outputtet vil være alfabetisk. Du kan ikke være sikker på, hvilken tråd der kommer til synchronized blokere først. Så i dette særlige tilfælde, join() er mest passende.


thread.join() stopper udførelsen af ​​aktuel tråd indtil den tilsluttede tråd er færdig.. Du har kommenteret korrekt.. :)

Synkronisering forhindrer flere tråde fra at udføre den synkroniserede del af koden på samme instans.


synchronized nøgleordet muliggør en låsemekanisme, der tillader tråde ikke at træde på hinanden. Java-dokumentation beskriver dette som en måde at "forebygge trådinterferens og hukommelseskonsistensfejl".

Hvis du bruger join() , sørger den for, at så snart en tråd kalder join, vil den aktuelle tråd (kørende tråd) ikke køre, medmindre den tråd du har kaldt join er afsluttet. Jeg tror, ​​at diagrammet nedenfor kan hjælpe med at visualisere dette bedre.

Kilde


Java tag