Multithreading on Java-ominaisuus, joka mahdollistaa kahden tai useamman ohjelman samanaikaisen suorittamisen prosessorin maksimaalisen käytön varmistamiseksi. Jokaista tällaisen ohjelman osaa kutsutaan säikeeksi. Langat ovat siis kevyitä prosesseja prosessin sisällä.
Säikeitä voidaan luoda kahdella mekanismilla:
- Thread-luokan laajentaminen
- Suoritettavan käyttöliittymän käyttöönotto
Säikeen luominen laajentamalla säikeen luokkaa
Luomme luokan, joka laajentaa java.lang.Thread luokkaa. Tämä luokka ohittaa Thread-luokassa käytettävissä olevan run()-metodin. Säie aloittaa elämänsä run()-menetelmän sisällä. Luomme uuden luokkamme objektin ja kutsumme start()-metodia aloittamaan säikeen suorittamisen. Start() kutsuu run()-metodin Thread-objektissa.
Java
// Java code for thread creation by extending> // the Thread class> class> MultithreadingDemo>extends> Thread {> >public> void> run()> >{> >try> {> >// Displaying the thread that is running> >System.out.println(> >'Thread '> + Thread.currentThread().getId()> >+>' is running'>);> >}> >catch> (Exception e) {> >// Throwing an exception> >System.out.println(>'Exception is caught'>);> >}> >}> }> // Main Class> public> class> Multithread {> >public> static> void> main(String[] args)> >{> >int> n =>8>;>// Number of threads> >for> (>int> i =>0>; i MultithreadingDemo object = new MultithreadingDemo(); object.start(); } } }> |
ero binääripuun ja binäärihakupuun välillä
>
>Lähtö
Thread 15 is running Thread 14 is running Thread 16 is running Thread 12 is running Thread 11 is running Thread 13 is running Thread 18 is running Thread 17 is running>
Säikeen luominen toteuttamalla Runnable Interface
Luomme uuden luokan, joka toteuttaa java.lang.Runnable interfacen ja override run() -metodin. Sitten instantoimme Thread-objektin ja kutsumme start()-metodia tälle objektille.
Java
// Java code for thread creation by implementing> // the Runnable Interface> class> MultithreadingDemo>implements> Runnable {> >public> void> run()> >{> >try> {> >// Displaying the thread that is running> >System.out.println(> >'Thread '> + Thread.currentThread().getId()> >+>' is running'>);> >}> >catch> (Exception e) {> >// Throwing an exception> >System.out.println(>'Exception is caught'>);> >}> >}> }> // Main Class> class> Multithread {> >public> static> void> main(String[] args)> >{> >int> n =>8>;>// Number of threads> >for> (>int> i =>0>; i Thread object = new Thread(new MultithreadingDemo()); object.start(); } } }> |
>
>Lähtö
Thread 13 is running Thread 11 is running Thread 12 is running Thread 15 is running Thread 14 is running Thread 18 is running Thread 17 is running Thread 16 is running>
Säieluokka vs. ajettava käyttöliittymä
- Jos laajennamme Thread-luokkaa, luokkamme ei voi laajentaa mitään muuta luokkaa, koska Java ei tue moniperintöä. Mutta jos otamme käyttöön Runnable-rajapinnan, luokkamme voi silti laajentaa muita perusluokkia.
- Voimme saavuttaa säikeen perustoiminnot laajentamalla Thread-luokkaa, koska se tarjoaa joitain sisäänrakennettuja menetelmiä, kuten tuotto(), interrupt() jne., jotka eivät ole käytettävissä Runnable-rajapinnassa.
- Runnable antaa sinulle objektin, joka voidaan jakaa useiden säikeiden kesken.