Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:java:java_szalkezeles

Ez a dokumentum egy előző változata!


< Java

Java szálkezelés

  • Szerző: Sallai András
  • Copyright © Sallai András, 2014, 2016
  • Licenc: GNU Free Documentation License 1.3

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 folyamatban");
 
    }
}
oktatas/programozas/java/java_szalkezeles.1670788593.txt.gz · Utolsó módosítás: 2022/12/11 20:56 szerkesztette: admin