Kādiem līdzekļiem Java valodā var izveidot pavedienus?
sobes.tech AI
Atbilde no AI
Java straumes var izveidot vairākos veidos:
-
Mantojot no klases
Thread: Tiek izveidota jauna klase, kas manto nojava.lang.Thread, un pārdefinēta metoderun().// Izveidojam klasi, kas manto no Thread class MyThread extends Thread { // Pārdefinējam metodi run @Override public void run() { // Kods, kas tiek izpildīts jaunajā straumē System.out.println("Straume " + Thread.currentThread().getName() + " ir palaista."); } }Straumes palaišana:
// Izveidojam straumes instanci MyThread thread = new MyThread(); // Sākam straumes izpildi thread.start(); -
Interfeisa
Runnableīstenošana: Tiek izveidota klase, kas īsteno interfeisujava.lang.Runnable, un tiek sniegtarun()metodes realizācija. Tad tiek izveidotsThreadobjekts, kuram tiek nodotsRunnableobjekts.// Izveidojam klasi, kas īsteno Runnable interfeisu class MyRunnable implements Runnable { // Realizējam metodi run @Override public void run() { // Kods, kas tiek izpildīts jaunajā straumē System.out.println("Straume " + Thread.currentThread().getName() + " ir palaista."); } }Straumes palaišana:
// Izveidojam Runnable instanci MyRunnable runnable = new MyRunnable(); // Izveidojam Thread objektu, nododot tajā Runnable Thread thread = new Thread(runnable); // Sākam straumes izpildi thread.start();Šis veids ir priekšroka, jo tas ļauj klasei manto arī no citiem klases veidiem.
-
Interfeisa
Callableīstenošana unExecutorServiceizmantošana: Interfeissjava.util.concurrent.Callable, līdzīgiRunnable, pārstāv uzdevumu, kas var tikt izpildīts citā straumē, bet atšķirībā noRunnable, metodecall()var atgriezt rezultātu un izsaukt izņēmumus.Callableizpildei parasti tiek izmantoti straumes baseini nojava.util.concurrent.ExecutorService.import java.util.concurrent.*; // Izveidojam klasi, kas īsteno Callable interfeisu class MyCallable implements Callable<String> { // Realizējam metodi call, kas var atgriezt rezultātu @Override public String call() throws Exception { // Kods, kas tiek izpildīts jaunajā straumē System.out.println("Straume " + Thread.currentThread().getName() + " ir palaista."); // Atgriežam rezultātu return "Uzdevums veiksmīgi pabeigts!"; } }Palaišana un rezultāta saņemšana:
import java.util.concurrent.*; // Izveidojam straumes baseinu ExecutorService executor = Executors.newFixedThreadPool(1); // Izveidojam Callable instanci MyCallable callable = new MyCallable(); // Nosūtām uzdevumu izpildei un saņemam Future, lai sekotu līdzi rezultātam Future<String> future = executor.submit(callable); try { // Saņemam uzdevuma rezultātu String result = future.get(); System.out.println("Rezultāts: " + result); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } finally { // Noteikti pārtraucam `ExecutorService` darbību executor.shutdown(); }