Subprocesamiento múltiple de Java: la palabra clave sincronizada simplemente logra la sincronización

Al implementar subprocesos múltiples, si varios subprocesos acceden a la misma variable, como cadenas de salida, y hay varias declaraciones de salida, es probable que ocurra esta situación: A es la mitad de la salida y B se inserta nuevamente. Salida, y luego se inserta otro hilo, entonces la salida se volverá confusa

Por ejemplo

Puedes ver que las oraciones de salida se cruzan entre sí
Inserte la descripción de la imagen aquí

import java.util.concurrent.*;

class printThread extends Thread {
	String thname;
	
	printThread(String threadName) {
		this.thname = threadName;
	}
	
	public void run() {
		System.out.print("0123456789");
		System.out.print("abcdefg");
		System.out.print("ABCDEFG");
		System.out.print("HelloWorld");
		System.out.print("7777777");
		System.out.print("XiaoXinMaZiLi");
		System.out.println();
	}
}

public class mutilThread {
	public static void main(String[] args) {
		ExecutorService pool = Executors.newCachedThreadPool();
		for(int i=0; i<100; i++) {
			printThread pt = new printThread(i+"");
			pool.submit(pt);
		}
		pool.shutdown();
	}
}

La palabra clave sincronizada implementa bloques de código sincronizado

El hilo actual y el acceso es Obj, estarán Objen funcionamiento en alrededor de la mitad de la declaración, se puede lograr Objla sincronización, que al mismo tiempo, sólo por una operación de rosca objetivo Objobjetos

synchronized(Obj) {
	// 要对 Obj 对象操作的语句
}
public void run() {
	synchronized(System.out) {
		System.out.print("0123456789");
		System.out.print("abcdefg");
		System.out.print("ABCDEFG");
		System.out.print("HelloWorld");
		System.out.print("7777777");
		System.out.print("XiaoXinMaZiLi");
		System.out.println();
	}
}

Por ejemplo

Inserte la descripción de la imagen aquí

import java.util.concurrent.*;

class printThread extends Thread {
	String thname;
	printThread(String threadName) {
		this.thname = threadName;
	}
	
	public void run() {
		synchronized(System.out) {
			System.out.print("0123456789");
			System.out.print("abcdefg");
			System.out.print("ABCDEFG");
			System.out.print("HelloWorld");
			System.out.print("7777777");
			System.out.print("XiaoXinMaZiLi");
			System.out.println();
		}
	}
}

public class mutilThread {
	public static void main(String[] args) {
		ExecutorService pool = Executors.newCachedThreadPool();
		for(int i=0; i<100; i++) {
			printThread pt = new printThread(i+"");
			pool.submit(pt);
		}
		pool.shutdown();
	}
}
262 artículos originales publicados · ganó 11 · 10 mil visitas

Supongo que te gusta

Origin blog.csdn.net/weixin_44176696/article/details/105159373
Recomendado
Clasificación