Heim > Java > javaLernprogramm > Sind Bohnen im Frühjahr fadensicher?

Sind Bohnen im Frühjahr fadensicher?

(*-*)浩
Freigeben: 2019-09-12 16:14:59
nach vorne
3149 Leute haben es durchsucht

Sind Bohnen im Frühjahr fadensicher?

Sind Bohnen im Frühjahr fadensicher?

Der Frühling garantiert nicht die Fadensicherheit von Bohnen.

Bohnen im Federbehälter sind standardmäßig Singletons. Wenn in einem Singleton eine Racebedingung vorliegt, liegt ein Thread-Sicherheitsproblem vor. Wie im folgenden Beispiel

Zählklasse

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);
	}
}
Nach dem Login kopieren

Federkonfigurationsdatei

<?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>
Nach dem Login kopieren

Testklasse

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();
		}
		
	}
	
}
Nach dem Login kopieren

Drucken Sie den Anfang und das Ende des Ergebnisses aus

1
5
7
4
2
6
3
8
9
.
.
.
9818
9819
9820
9821
9822
9823
9824
9825
Nach dem Login kopieren

Der maximal zu druckende Wert sollte 10000 sein

Ändern Sie die Federkonfigurationsdatei und ändern Sie die Bean Umfang zum Prototyp

<?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>
Nach dem Login kopieren

Das Testergebnis gibt 10 1000 aus

Sind Bohnen im Frühjahr fadensicher?Das heißt, jeder Thread erstellt ein Counter-Objekt und zählt unabhängig innerhalb des Threads, sodass kein Problem mit der Thread-Sicherheit besteht. Dies ist jedoch nicht das gewünschte Ergebnis, 10000 wird gedruckt.

Die Thread-Sicherheit von Beans, die von Spring verwaltet werden, hängt also davon ab, ob im Erstellungsbereich der Bean Race-Bedingungen vorliegen, und die Verwendungsumgebung, in der sich die Bean befindet, kann die Thread-Sicherheit von Beans nicht garantieren.

Das obige ist der detaillierte Inhalt vonSind Bohnen im Frühjahr fadensicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage