Maison > Java > javaDidacticiel > Les haricots du printemps sont-ils sans danger pour les fils ?

Les haricots du printemps sont-ils sans danger pour les fils ?

(*-*)浩
Libérer: 2019-09-12 16:14:59
avant
3129 Les gens l'ont consulté

Les haricots du printemps sont-ils sans danger pour les fils ?

Les haricots du printemps sont-ils sans danger pour les fils ?

Spring ne garantit pas la sécurité du fil des haricots.

Les haricots dans le conteneur Spring sont des singletons par défaut. Lorsqu'il y a une condition de concurrence critique dans un singleton, il y a un problème de sécurité des threads. Comme l'exemple suivant

Classe de comptage

package constxiong.interview.threadsafe;
 
/**
 * 计数类
 * @author ConstXiong
 * @date 2019-07-16 14:35:40
 */
public class Counter {
 
	private int count = 0;
	
	public void addAndPrint() {
		try {
			Thread.sleep(10);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println(++count);
	}
}
Copier après la connexion

fichier de configuration Spring

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd
	    http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
        
	<bean id="counter" class="constxiong.interview.threadsafe.Counter" />
	
</beans>
Copier après la connexion

Classe de test

package constxiong.interview.threadsafe;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class CounterTest {
	
	public static void main(String[] args) {
		final ApplicationContext context = new ClassPathXmlApplicationContext("spring_safe.xml");
 
		for (int i = 0; i < 10; i++) {
			new Thread(){
				@Override
				public void run() {
					Counter counter = (Counter)context.getBean("counter");
					for (int j = 0; j < 1000; j++) {
						counter.addAndPrint();
					}
				}
			}.start();
		}
		
	}
	
}
Copier après la connexion

Imprimer le début et la fin du résultat

1
5
7
4
2
6
3
8
9
.
.
.
9818
9819
9820
9821
9822
9823
9824
9825
Copier après la connexion

La valeur maximale attendue à imprimer doit être de 10000

Modifier le fichier de configuration Spring et changer la portée du bean au prototype

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd
	    http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
	<bean id="counter" class="constxiong.interview.threadsafe.Counter" scope="prototype"/>
</beans>
Copier après la connexion

Le résultat du test génère 10 1000

Les haricots du printemps sont-ils sans danger pour les fils ?C'est-à-dire que chaque thread crée un objet Counter et compte indépendamment dans le thread, il n'y a donc pas de problème de sécurité des threads. Mais ce n’est pas le résultat souhaité, 10 000 sont imprimés.

Ainsi, la sécurité des threads des beans gérés par Spring est liée à l'existence ou non de conditions de concurrence dans la portée de création du bean et à l'environnement d'utilisation où se trouve le bean. Spring ne peut pas garantir la sécurité des threads des beans.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal