Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Säikeet Javassa | Monisäikeisyyden Perusteet
Monisäikeisyys Javassa

bookSäikeet Javassa

Esimerkiksi, kuvittele, että ohjelmassasi on pääsäie, joka vastaa käyttöliittymän näyttämisestä. Samanaikaisesti voit luoda lisäsäikeen datan lataamiseen verkosta tai monimutkaisten laskutoimitusten suorittamiseen. Tämä tekee ohjelmasta reagoivamman ja tehokkaamman.

Säikeen määrittely Javassa

Luokalla Thread voit luoda Thread-luokan aliluokan ja ylikirjoittaa run() -metodin, joka sisältää koodin, joka suoritetaan uudessa säikeessä.

Main.java

Main.java

copy
123456789
// Create a new thread using an anonymous subclass of `Thread` Thread thread = new Thread() { public void run() { // Code that will execute in the new thread } }; // Start the thread execution thread.start();

Runnable-rajapinnan käyttäminen

Runnable-rajapinnan avulla voit toteuttaa Runnable-rajapinnan, määritellä run()-metodin ja välittää sen Thread-luokan konstruktorille.

Main.java

Main.java

copy
123456789101112
// Create a new `Runnable` instance with an anonymous class implementing the run method Runnable runnable = new Runnable() { public void run() { // Code that will execute in the new thread } }; // Create a new `Thread` instance, passing the `Runnable` as argument Thread thread = new Thread(runnable); // Start the thread execution thread.start();

Thread-luokan perintä

Vaihtoehtoisesti voit periä Thread-luokan ja ylikirjoittaa run()-metodin.

Main.java

Main.java

copy
123456789
// The `MyThread` class extends the `Thread` class to create a custom thread public class MyThread extends Thread { // The run method is overridden to define the task that the thread will execute @Override public void run() { // Code to be executed by the thread should go here } }

Runnable-rajapinnan toteutus

Voit myös toteuttaa Runnable-rajapinnan ja siinä toteuttaa run()-metodin:

Main.java

Main.java

copy
123456789
// The `MyThread` class implements the `Runnable` interface to create a custom task public class MyThread implements Runnable { // The run method is overridden to define the task that will be executed when the thread runs @Override public void run() { // Code to be executed by the thread should go here } }
Note
Huomio

run() -metodi Java säikeessä mahdollistaa koodin suorittamisen erillisessä säikeessä, mukaan lukien tehtävät kuten tietojen käsittely, laskutoimitukset, tiedostojen lataaminen sekä tiedon lähettäminen tai vastaanottaminen verkon yli.

Ero säikeen ja Runnable-rajapinnan välillä

Java-ohjelmoinnissa Thread on erityinen kanava, joka mahdollistaa tehtävien samanaikaisen suorittamisen, jolloin ohjelma voi suorittaa operaatioita erillisessä säikeessä, kuten laskentaa tai pitkäkestoisia prosesseja esimerkiksi tietojen lataamista.

Runnable -rajapinta, jossa on yksi run() -metodi, määrittelee tehtävän, jonka säie suorittaa. Voit välittää Runnable-toteutuksen Thread-konstruktorille suorittaaksesi tehtävän uudessa säikeessä. Tämä menetelmä auttaa hallitsemaan ja suorittamaan rinnakkaisia tehtäviä tehokkaasti.

Java-säikeiden käytettävissä olevat metodit

Säie käynnistetään käyttämällä start()-metodia, joka osoittaa, että koodi suoritetaan uudessa säikeessä. Tämä tarkoittaa, että pääsäie jatkaa oman koodinsa suorittamista eikä odota uuden säikeen valmistumista.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526
package com.example; public class Main { public static void main(String[] args) throws InterruptedException { // Create a new thread that will sleep for 5 seconds Thread thread = new Thread(() -> { try { Thread.sleep(5000); // Simulate work by sleeping for 5 seconds } catch (InterruptedException e) { throw new RuntimeException(e); // Handle interruption by rethrowing as a runtime exception } }); // Start the thread thread.start(); // Check if the thread is alive before calling `join()` System.out.println("Is the thread alive before the join() method: " + thread.isAlive()); // Wait for the thread to finish execution thread.join(); // Check if the thread is alive after `join()` System.out.println("Is the thread alive after join(): " + thread.isAlive()); } }

Meillä on myös menetelmä, jolla pääsäie voi odottaa käynnistämänsä säikeen suorituksen päättymistä käyttämällä join()-metodia. Tämä metodi odottaa, kunnes säie on suoritettu kokonaan. Voit tarkistaa, onko säie parhaillaan käynnissä käyttämällä isAlive()-metodia.

Koodi Thread.sleep(5000) keskeyttää säikeen 5000 millisekunnin (5 sekunnin) ajaksi.

try {
    Thread.sleep(5000); // Simulate work by sleeping for 5 seconds
} catch (InterruptedException e) {
    throw new RuntimeException(e); // Handle interruption by rethrowing as a runtime exception
}

Esimerkissä ennen join()-kutsua säie oli työn alla. join()-kutsun jälkeen se ei enää ole, koska join() tarkoittaa, että odotamme kyseisessä kohdassa, kunnes säie on suorittanut tehtävänsä loppuun.

Jos haluamme pysäyttää säikeen, voimme käyttää interrupt()-metodia. Jotta tämä toimii, meidän täytyy tarkistaa, onko pysäytettävä säie keskeytetty.

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; public class Main { public static void main(String[] args) throws InterruptedException { // Create a thread that will perform some task Thread thread = new Thread(() -> { // Loop runs until the thread is interrupted while (!Thread.currentThread().isInterrupted()) { System.out.println("Thread is running..."); // Simulate some work with a delay try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("Thread was interrupted during sleep."); // Re-interrupt the thread to ensure the loop exits Thread.currentThread().interrupt(); } } System.out.println("Thread is exiting..."); }); // Start the thread thread.start(); // Let the thread run for a bit Thread.sleep(3000); // Interrupt the thread thread.interrupt(); } }

Tässä esimerkissä luodaan säie, joka suorittaa tehtävää silmukassa, kunnes se keskeytetään. Kun säie keskeytetään sen ollessa nukkumassa, se heittää poikkeuksen, käsittelee sen asettamalla keskeytyslipun ja sitten päättyy.

Ilman InterruptedException-poikkeuksen käsittelijää säikeessä, säiettä ei keskeytettäisi.

Note
Huomautus

Nämä menetelmät mahdollistavat säikeiden elinkaaren ja suorituksen hallinnan Javassa, tarjoten joustavuutta ja hallintaa monisäikeisissä sovelluksissa. Seuraavissa luvuissa perehdymme näihin menetelmiin tarkemmin.

1. Mikä on säie Javassa?

2. Mikä on ero Thread-luokan ja Runnable-rajapinnan välillä Javassa?

question mark

Mikä on säie Javassa?

Select the correct answer

question mark

Mikä on ero Thread-luokan ja Runnable-rajapinnan välillä Javassa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 3

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 3.33

bookSäikeet Javassa

Pyyhkäise näyttääksesi valikon

Esimerkiksi, kuvittele, että ohjelmassasi on pääsäie, joka vastaa käyttöliittymän näyttämisestä. Samanaikaisesti voit luoda lisäsäikeen datan lataamiseen verkosta tai monimutkaisten laskutoimitusten suorittamiseen. Tämä tekee ohjelmasta reagoivamman ja tehokkaamman.

Säikeen määrittely Javassa

Luokalla Thread voit luoda Thread-luokan aliluokan ja ylikirjoittaa run() -metodin, joka sisältää koodin, joka suoritetaan uudessa säikeessä.

Main.java

Main.java

copy
123456789
// Create a new thread using an anonymous subclass of `Thread` Thread thread = new Thread() { public void run() { // Code that will execute in the new thread } }; // Start the thread execution thread.start();

Runnable-rajapinnan käyttäminen

Runnable-rajapinnan avulla voit toteuttaa Runnable-rajapinnan, määritellä run()-metodin ja välittää sen Thread-luokan konstruktorille.

Main.java

Main.java

copy
123456789101112
// Create a new `Runnable` instance with an anonymous class implementing the run method Runnable runnable = new Runnable() { public void run() { // Code that will execute in the new thread } }; // Create a new `Thread` instance, passing the `Runnable` as argument Thread thread = new Thread(runnable); // Start the thread execution thread.start();

Thread-luokan perintä

Vaihtoehtoisesti voit periä Thread-luokan ja ylikirjoittaa run()-metodin.

Main.java

Main.java

copy
123456789
// The `MyThread` class extends the `Thread` class to create a custom thread public class MyThread extends Thread { // The run method is overridden to define the task that the thread will execute @Override public void run() { // Code to be executed by the thread should go here } }

Runnable-rajapinnan toteutus

Voit myös toteuttaa Runnable-rajapinnan ja siinä toteuttaa run()-metodin:

Main.java

Main.java

copy
123456789
// The `MyThread` class implements the `Runnable` interface to create a custom task public class MyThread implements Runnable { // The run method is overridden to define the task that will be executed when the thread runs @Override public void run() { // Code to be executed by the thread should go here } }
Note
Huomio

run() -metodi Java säikeessä mahdollistaa koodin suorittamisen erillisessä säikeessä, mukaan lukien tehtävät kuten tietojen käsittely, laskutoimitukset, tiedostojen lataaminen sekä tiedon lähettäminen tai vastaanottaminen verkon yli.

Ero säikeen ja Runnable-rajapinnan välillä

Java-ohjelmoinnissa Thread on erityinen kanava, joka mahdollistaa tehtävien samanaikaisen suorittamisen, jolloin ohjelma voi suorittaa operaatioita erillisessä säikeessä, kuten laskentaa tai pitkäkestoisia prosesseja esimerkiksi tietojen lataamista.

Runnable -rajapinta, jossa on yksi run() -metodi, määrittelee tehtävän, jonka säie suorittaa. Voit välittää Runnable-toteutuksen Thread-konstruktorille suorittaaksesi tehtävän uudessa säikeessä. Tämä menetelmä auttaa hallitsemaan ja suorittamaan rinnakkaisia tehtäviä tehokkaasti.

Java-säikeiden käytettävissä olevat metodit

Säie käynnistetään käyttämällä start()-metodia, joka osoittaa, että koodi suoritetaan uudessa säikeessä. Tämä tarkoittaa, että pääsäie jatkaa oman koodinsa suorittamista eikä odota uuden säikeen valmistumista.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526
package com.example; public class Main { public static void main(String[] args) throws InterruptedException { // Create a new thread that will sleep for 5 seconds Thread thread = new Thread(() -> { try { Thread.sleep(5000); // Simulate work by sleeping for 5 seconds } catch (InterruptedException e) { throw new RuntimeException(e); // Handle interruption by rethrowing as a runtime exception } }); // Start the thread thread.start(); // Check if the thread is alive before calling `join()` System.out.println("Is the thread alive before the join() method: " + thread.isAlive()); // Wait for the thread to finish execution thread.join(); // Check if the thread is alive after `join()` System.out.println("Is the thread alive after join(): " + thread.isAlive()); } }

Meillä on myös menetelmä, jolla pääsäie voi odottaa käynnistämänsä säikeen suorituksen päättymistä käyttämällä join()-metodia. Tämä metodi odottaa, kunnes säie on suoritettu kokonaan. Voit tarkistaa, onko säie parhaillaan käynnissä käyttämällä isAlive()-metodia.

Koodi Thread.sleep(5000) keskeyttää säikeen 5000 millisekunnin (5 sekunnin) ajaksi.

try {
    Thread.sleep(5000); // Simulate work by sleeping for 5 seconds
} catch (InterruptedException e) {
    throw new RuntimeException(e); // Handle interruption by rethrowing as a runtime exception
}

Esimerkissä ennen join()-kutsua säie oli työn alla. join()-kutsun jälkeen se ei enää ole, koska join() tarkoittaa, että odotamme kyseisessä kohdassa, kunnes säie on suorittanut tehtävänsä loppuun.

Jos haluamme pysäyttää säikeen, voimme käyttää interrupt()-metodia. Jotta tämä toimii, meidän täytyy tarkistaa, onko pysäytettävä säie keskeytetty.

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; public class Main { public static void main(String[] args) throws InterruptedException { // Create a thread that will perform some task Thread thread = new Thread(() -> { // Loop runs until the thread is interrupted while (!Thread.currentThread().isInterrupted()) { System.out.println("Thread is running..."); // Simulate some work with a delay try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("Thread was interrupted during sleep."); // Re-interrupt the thread to ensure the loop exits Thread.currentThread().interrupt(); } } System.out.println("Thread is exiting..."); }); // Start the thread thread.start(); // Let the thread run for a bit Thread.sleep(3000); // Interrupt the thread thread.interrupt(); } }

Tässä esimerkissä luodaan säie, joka suorittaa tehtävää silmukassa, kunnes se keskeytetään. Kun säie keskeytetään sen ollessa nukkumassa, se heittää poikkeuksen, käsittelee sen asettamalla keskeytyslipun ja sitten päättyy.

Ilman InterruptedException-poikkeuksen käsittelijää säikeessä, säiettä ei keskeytettäisi.

Note
Huomautus

Nämä menetelmät mahdollistavat säikeiden elinkaaren ja suorituksen hallinnan Javassa, tarjoten joustavuutta ja hallintaa monisäikeisissä sovelluksissa. Seuraavissa luvuissa perehdymme näihin menetelmiin tarkemmin.

1. Mikä on säie Javassa?

2. Mikä on ero Thread-luokan ja Runnable-rajapinnan välillä Javassa?

question mark

Mikä on säie Javassa?

Select the correct answer

question mark

Mikä on ero Thread-luokan ja Runnable-rajapinnan välillä Javassa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 3
some-alt