Java-szálak
A Java nyelvi környezet különösen alkalmas többszálú programok készítésére, futtatására. Szálak használataA Java programozási nyelvben az explicit szálkezelés tipikusan a következő célok elérését szolgálja:
Az aktuális szál felfüggesztése például a Pl: Szálak létrehozásaEgy szál létrehozásának két lehetséges módja van:
Példa ez utóbbira: public class TestTask implements Runnable {
public void run () {
System.out.println("Helló világ");
}
public static void main (String[] args) {
Thread thread = new Thread(new TestTask());
thread.start();
}
}
SzinkronizációEgy többszálú Java-program egyszerre számos feladatot tud végrehajtani, függetlenül a processzormagok számától. A programok futtatásáért felelős JVM (Java virtuális gép, az angol Java Virtual Machine rövidítése) a saját ütemezője szerint választja ki, hogy éppen melyik szálat futtatja. Mindez JVM-implementáció függő, és befolyásolható több módon is:
Az alábbi példában a saját objektum blokkolódik más szálak számára a private final List<Item> items;
public synchronized Optional<Item> findByName(String name) {
return items.stream()
.filter(i -> i.getName(name).equals(name))
.findAny();
}
Mivel a fenti A fenti módszerrel csak a saját objektum (statikus metódus esetén a A blokkszintű (blokk alatt itt kódblokkot és nem a blokkolási mechanizmust értve) szinkronizáció esetében viszont explicite meg kell adni egy blokkolandó objektumot (monitor). Optional<String> optionalItem;
synchronized (items) {
optionalItem = items.stream()
.filter(i -> i.getName(name).equals(name))
.findAny();
}
A A szinkronizáció a memóriaszervezést is érinti. A JVM minden szál számára saját memória-gyorsítótárat tart fenn. A szinkronizált programrészek végrehajtása alatt minden adatmódosítás kizárólag a gyorsítótárat érinti, kivéve ha az adott objektum volatilis, azaz nem gyorstárazható, mely esetben nem szükséges blokkolás, ha csak kiolvasás történik. Bármely mező volatilissé tehető a A Új lehetőségekA Java az 1.5 verziótól további szinkronizációs lehetőségeket kínál, nem nyelvi szinten, hanem új osztálykönyvtár biztosításával:
A Java 18 (egyelőre kísérleti jelleggel) bevezette a virtuális szálak (Virtual Threads) támogatását. Ezek olyan Java-szálak, melyekhez nem tartozik kernel-szintű szál, így (más előnyök mellett) kisebb overheaddel használhatók. A virtuális szálak is a Példa virtuális szál létrehozására: ThreadFactory virtualThreadFactory = Thread
.builder()
.virtual()
.factory();
Thread virtualThread = virtualThreadFactory
.newThread(() -> System.out.println("Helló virtuális világ!"));
virtualThread.start();
|
Portal di Ensiklopedia Dunia