Java >> Tutoriel Java >  >> Java

Comment pouvons-nous atteindre la sécurité des threads en Java ?

Sécurité des threads en Java

  • Sécurité des fils Le concept est introduit dans les concepts de synchronisation de Java.
  • Lorsque plusieurs personnes ou plusieurs threads opèrent simultanément sur le même objet, il peut y avoir un risque de problème d'incohérence.
  • En utilisant un mot-clé synchronisé, nous pouvons atteindre la sécurité des threads (c'est-à-dire qu'un seul thread est autorisé à accéder à un objet particulier).
  • En utilisant le concept de synchronisation, nous pouvons surmonter le problème d'incohérence.
  • Avec l'aide d'exemples, nous comprendrons pourquoi Thread safety est nécessaire ?

Exemple :Dans un système de réservation

  1. Dans un train, nous n'avons que 5 places vacantes.
  2. Si deux personnes essaient de réserver des billets en ligne et que chacune veut trois places.
  3. Lorsque les deux peuvent avoir une chance, mais que l'un d'eux recevra un message indiquant qu'il ne reste plus suffisamment d'espace.
  • Si une méthode ou un bloc est déclaré synchronisé, un seul thread à la fois est autorisé à exécuter cette méthode ou ce bloc sur un objet particulier afin que le problème d'incohérence des données soit résolu.
  • Si les threads s'exécutent un par un, nous pouvons obtenir une incohérence des données et une sécurité des threads, mais cela augmente le temps d'attente du thread et les performances diminuent.
  • Si nous déclarons une méthode comme synchronisée, cela signifie qu'un seul thread est autorisé à accéder à cette méthode à la fois et que les threads restants peuvent accéder simultanément aux méthodes non synchronisées (c'est-à-dire Restriction sur la méthode synchronisée et Aucune restriction sur la méthode non synchronisée).
  • La sécurité des threads sera requise lorsque vous travaillez avec plusieurs threads sur le même objet. Dans un thread sera dans un état sûr, il n'est pas nécessaire de l'implémenter dans un seul thread.

Exemple :

Dans l'exemple ci-dessous, nous allons implémenter des concepts de synchronisation :

class SynchronizeMethodClass{

	public synchronized void fruits( String fruits){
		for(int i=0;i<10;++i){
			System.out.println("I am in fruits method :");
			try{
				Thread.sleep(1000);
			}
			catch(InterruptedException ie){
				System.out.println("Exception occurs");
			}
			System.out.println(fruits);
		}
	}
}

class FirstThread extends Thread{
	SynchronizeMethodClass SMC;
	String fruits;
	FirstThread(SynchronizeMethodClass SMC , String fruits){
		this.SMC = SMC;
		this.fruits = fruits;
	}
	public void run(){
		SMC.fruits(fruits);
	}
}

class SecondThread{
	public static void main(String[] args){
		SynchronizeMethodClass SMC = new SynchronizeMethodClass();
		FirstThread FT  = new FirstThread(SMC,"APPLE");
		FirstThread FTT= new FirstThread(SMC,"Orange");
		FirstThread FTTT = new FirstThread(SMC,"Grapes");
		FirstThread FTTTT = new FirstThread(SMC,"Banana");
		FT.start();
		FTT.start();
		FTTT.start();
		FTTTT.start();
	}
}

Sortie

D:\Java Articles>java SecondThread
I am in fruits method :
Grapes
I am in fruits method :
Grapes
I am in fruits method :
Grapes
I am in fruits method :
Grapes
I am in fruits method :
Grapes
I am in fruits method :
Grapes
I am in fruits method :
Grapes
I am in fruits method :
Grapes
I am in fruits method :
Grapes
I am in fruits method :
Grapes
I am in fruits method :
Banana
I am in fruits method :
Banana
I am in fruits method :
Banana
I am in fruits method :
Banana
I am in fruits method :
Banana
I am in fruits method :
Banana
I am in fruits method :
Banana
I am in fruits method :
Banana
I am in fruits method :
Banana
I am in fruits method :
Banana
I am in fruits method :
Orange
I am in fruits method :
Orange
I am in fruits method :
Orange
I am in fruits method :
Orange
I am in fruits method :
Orange
I am in fruits method :
Orange
I am in fruits method :
Orange
I am in fruits method :
Orange
I am in fruits method :
Orange
I am in fruits method :
Orange
I am in fruits method :
APPLE
I am in fruits method :
APPLE
I am in fruits method :
APPLE
I am in fruits method :
APPLE
I am in fruits method :
APPLE
I am in fruits method :
APPLE
I am in fruits method :
APPLE
I am in fruits method :
APPLE
I am in fruits method :
APPLE
I am in fruits method :
APPLE

En savoir plus...

  1. Expliquer le cycle de vie d'un thread en Java.
  2. Comment créer des threads Java (exemples Java pour créer des threads) ?
  3. Synchronisation des threads en Java avec exemple.
  4. Programme Java pour montrer un exemple de thread.
  5. Programme Java pour rejoindre les discussions.

Balise Java