Jämförelsediagram
Grunder för jämförelse | sova | vänta |
---|---|---|
Grundläggande | Sömnmetoden släpper inte låset på ett objekt tills det är avbrutet. | Vänteläge släpper låset på objektet för att låta andra objekt utföra tills anmälan eller anmälanAlla metod är åberopad. |
Klass | Sömnmetoden definieras i Thread-klassen. | Vänteläge definieras i Objeklassen. |
synkroniserad | Sömnmetoden behöver inte kallas i synkroniserat sammanhang. | Vänteläge måste ringas inom det synkroniserade sammanhanget. |
Komplettering | Utförandet av sömnmetoden är avslutat när en tråd avbryter den eller när sömnmetoden går ut. | Väntelägesutförandet är klart när meddelandet () eller notifyAll () -metoden avbryter det. |
Statisk | Sömnmetod är en statisk metod. | Vänteläge är inte statisk därför är det nödvändigt att invända mot det. |
Avrättning | Sömmetoden utförs på den aktuella tråden. | Ventetiden utförs på objektet. |
Undantag | InterruptedException | IllegalArgumentException, IllegalMonitorStateException, InterruptedException. |
Definition av sömnmetod
Sömnmetoden är den statiska metoden för Thread- klassen. Sova-metoden påkallas när en tråd inte vill utföra någon uppgift under en viss tid. Sömnmetoden fullbordar dess utförande antingen när tiden för metoden har löpt ut, eller den avbryts av någon annan tråd i utförandet. Efter att sömnmetoden har slutförts, får tråden igen sin körbar status. Det finns två från sömnmetoden som visas nedan.
statisk statisk infödd tomrumslängd (lång millisekund); statisk statisk tomrumslösning (långa millisekunder och int nanosekund);
I ovanstående form kan du observera att tiden nämns både i form av sömnmetoden. Detta beror på att en tråd alltid sover för en viss tid som nämns i parametern. Sova-metoden kan avbrytas av någon annan tråd under dess utförande; Därför kan den kasta avbruten exekvering. Du måste ta hand om att undantaget hanteras antingen genom att försöka / fånga block eller genom att slänga sökord på annat sätt, det leder till kompileringstidfelet. Sömningsmetoden håller låset på det aktuella objektet i exekveringen och tillåter inte att något annat objekt körs förrän det är fullbordat.
Definition av vänteläge
Vänta är metoden definierad i Objeklassen . Vänteläget används när flera uppgifter (trådar) kämpar för samma resurs en åt gången. Vänteläget när det åberopas det släpper låset på objektet som har åberopat väntningsmetoden. Och ge en chans till ett annat objekt att bli verkställt tills en anmälningsmetod är påkallad, vilket fortsätter låsningen på objektet som släpps med väntmetoden. Vänteläget har följande formulär.
vänta(); vänta (lång millisekund); vänta (lång millisekund, int nanosekund);
Som i de ovannämnda tre formerna för väntelägesmetoden har den första metoden ingen tidsparameter. Det betyder att exekveringen av väntelägesmetoden fortsätter tills meddelandet eller meddelandetAlla metod inte åberopas. De övriga två metoderna har tidsparametrar. Så de kommer att utföras tills tiden löper ut eller till anmälan eller noitfyAlla metod påkallas tidigare än tiden löper ut. Ventetiden kan göra undantag. IllegalArgumentException, om tidsargumentet är negativt. IllegalMonitorStateException, om den aktuella tråden inte använder resursen. AvbrutenException, om ventemetoden är avbruten.
Viktiga skillnader mellan sömn och vänta metod i Java
- Huvudpunkten som skiljer mellan sömn och väntningsmetod är att sömnmetoden håller låset på objektet tills det avbryts eller tiden går ut. Men väntetiden frigör låset på objektet som påstår det och ger andra objekt chansen att utföra.
- Sömnmetoden definieras i Thread- klassen medan ventemetoden är definierad i Objeklassen .
- Sömnmetoden behöver inte ringas från synkroniserat sammanhang. Men väntetiden måste ringas från synkroniserad.
- Sömnmetoden väcks om tiden för metoden har löpt ut eller den avbryts av den andra tråden. Vänteläget är väckt
när anmälan eller anmälan All-metoden åberopas. - Sömnmetoden är statisk metod medan ventemetoden inte är en statisk metod.
- Sova-metoden exekveras på den aktuella tråden medan väntelägesmetoden exekveras på objektet som åberopar det.
- Undantaget kastat av sömnmetoden är AvbrutetException, medan undantagen som trängs av väntmetoden är IllegalArgumentException, IllegalMonitorStateException, InterruptedException .
Slutsats:
När flera trådar vill använda samma resurs en efter en, måste väntelägesmetoden användas. När en tråd inte vill utföra någon uppgift, måste sömnmetoden användas.