Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:java:java_szalkezeles

< Java

Java szálkezelés

Bevezetés

Egy egyszerű program, egyetlen szálon fut. Ha azonban több esemény is történik egyszerre, akkor szükségünk lehet több szálon futó programra. Például egy program rajzol valamit a képernyőre, miközben mi olvasni szeretnénk a billentyűzetről. A több szálas program megoldja ezt a problémát.

Szálkészítés

A Javaban két lehetőség van több szálas program készítésére. Implementálhatunk egy interfészt vagy örökíthetünk egy osztályt.

Az osztály használata esetén csak annyit kell tennünk, hogy a Thread osztályból örökítjük saját osztályunka. A Thread osztály a következő csomagban van:

java.lang

Az alábbi példában a használatára látunk egy példát.

class Szamlalo extends Thread 
{                      
        public void run()                       
        {              
            //....            
        }
}

Létrehozunk egy Szamlalo osztályt, amely örökli Thread osztályt. A Thread.run() metódust pedig felülírjuk (override). A számlálás a run() metódusban történik.

public class Szamlalo implements Runnable
{
        Thread T;                        
        public void run()                       
        {                              
            //....            
        }
}

Egy különszál

Program.java
class Program
{
 
 
	Program()
	{
 
		MasodikSzal szerver  = new MasodikSzal();
		szerver.start();		
	}
 
	public static void main(String argv[]) throws Exception
	{
		//Főszál
		new Program();
 
	}
 
	class MasodikSzal extends Thread
	{
 
		public void run()
		{
			//Amit a másik szál tesz
		}
 
	}
}

Szálpélda

A példában a főszál két másodpercenként ír ki egy szöveget, a második szál pedig egy másodpercenként.

Program01.java
class Program02
{
	public static void main(String args[])
	{
		(new Thread()
		{
			public void run()
			{
				while(true)
				{
					System.out.println("Másik szál");
					try
					{
						Thread.sleep(1000);
					}
					catch(InterruptedException ex)
					{
						Thread.currentThread().interrupt();
					}
 
				}
			}
 
		}).start();
 
		while(true)
		{
			System.out.println("Főszál");
			try
			{
				Thread.sleep(2000);
			}
			catch(InterruptedException ex)
			{
				Thread.currentThread().interrupt();
			}
		}
 
	}
}

Szálpélda 2

Program01.java
class Program05
{
	public static void main(String args[])
	{
		new MasikSzal().start();
 
		while(true)
		{
			System.out.println("Főszál");
			try
			{
				Thread.sleep(2000);
			}
			catch(InterruptedException e)
			{
				Thread.currentThread().interrupt();
			}
		}
 
	}
}
class MasikSzal extends Thread
{
	public void run()
	{
		while(true)
		{
			System.out.println("Másik szál");
			try
			{
				Thread.sleep(4000);
			}
			catch(InterruptedException e)
			{
				Thread.currentThread().interrupt();
			}			
		}
	}	
}

Szálpélda Runnable interfésszel

Program01.java
class Program04
{
	public static void main(String args[])
	{
		new Thread(new MasikSzal()).start();
 
		while(true)
		{
			System.out.println("Főszál");
			try
			{
				Thread.sleep(2000);
			}
			catch(InterruptedException e)
			{
				Thread.currentThread().interrupt();
			}
		}
 
	}
}
class MasikSzal implements Runnable
{
	public void run()
	{
		while(true)
		{
			System.out.println("Másik szál");
			try
			{
				Thread.sleep(4000);
			}
			catch(InterruptedException e)
			{
				Thread.currentThread().interrupt();
			}			
		}
	}	
}

Egy függvényt külön szálon egyszerűen

Runnable doing = new Runnable() {
    @Override
    public void run() {
        fuggvenyKulonSzalon();
    }
};
SwingUtilities.invokeLater(doing); 

Aszinkron folyamat

FileHandler.java
public class FileHandler {
    public void write() {
        try {
            this.tryWrite();
        } catch (InterruptedException e) {
            System.err.println("Hiba az altatás során!");
        }
    }
    public void tryWrite() throws InterruptedException {
        Thread.sleep(2000);
        System.out.println("Fájlkezelés árnyékeljárás...");
    }
}
App.java
public class App {    
    public static void main(String[] args) throws Exception {
        FileHandler fileHandler = new FileHandler();
 
        new Thread(() -> fileHandler.write()).start();
        System.out.println("Kiírás hívása után");
 
    }
}
oktatas/programozas/java/java_szalkezeles.txt · Utolsó módosítás: 2023/08/24 20:12 szerkesztette: admin