Implementación de programación Jijiji: realice exclusión mutua de subprocesos múltiples en Windows, visualización del subproceso principal, suspensión durante 2 segundos, visualización del subproceso secundario, suspensión durante 1 segundo
paquete?com.cao.test;
¿clase pública?Test3?{
pública?estática?void?main(String?args[]) ?throws?Exception?{
Thread?t1?=?new?Thread(new?Runnable()?{
public?void?run()?{
intentar?{
long?s3?=?System.currentTimeMillis();
System.out.println("-----ocupado por subproceso-- - -------");
Singleton.getSigleton().getStr("F");
System.out.println("----- Fin de ocupación del hilo----------");
long?s4?=?System.currentTimeMillis();
System.out.println(" Tiempo ocupado por subprocesos: "?+?(s4?-?s3));
}?catch?(Exception?e)?{
e.printStackTrace();< / p>
}
}
});
t1.start();
long?s?= ? System.currentTimeMillis();
System.out.println("-----El hilo principal está ocupado----------");
Singleton.getSigleton().getStr("M");
System.out.println("-----Fin de la ocupación del hilo principal----------");
long?s2?=?System.currentTimeMillis();
System.out.println("Tiempo de ocupación del hilo principal:"?+?(s2?-?s))
}
}
clase?Singleton?{
privado?estático?Singleton?s;
public?String?str?=?"Hola";
public?String?getStr(String?tName)?throws?Exception?{
sincronizado?(Singleton.class) ?{
System.out.println(tName?+?"Enter");
Thread.sleep(1000);
System.out.println (tName?+?"End");
}
return?str;
}
privado?Singleton()? {
System.out.println("¿Un?Singleton?Model?ejemplo");
}
public?static?Singleton?getSigleton()? {<
/p>
si?(s?==?null)
s?=?new?Singleton();
retorno?s;
}
}
Ejecutar resultados.
-
-----El hilo principal está ocupado----------
-----El subproceso el hilo está ocupado ----------
Un ejemplo de modelo Singleton
Un ejemplo de modelo Singleton
MEnter
MEnd
-----Finaliza la ocupación del hilo principal----------
F enter
Tiempo de ocupación del hilo principal: 1002
p>F termina
-----Fin de ocupación del hilo----------
Tiempo ocupado por los hilos: 2006
Análisis: M es el subproceso principal, F es el subproceso y str es el recurso Independientemente del subproceso M o F, ingresar el método getStr dormirá durante 1000 milisegundos. bloquee el método y solo un subproceso puede operar el método getStr. No importa qué subproceso ingrese primero en este momento, esperará 1 segundo en el método y luego saldrá, por lo que el subproceso M ingresa y duerme durante un segundo. El proceso F está esperando a que el subproceso M termine de ejecutarse, el tiempo de espera es de 1 segundo y luego ingresa al método getStr para dormir durante 1 segundo, por lo que el subproceso M tiene 1 segundo para dormir y el subproceso F espera más el modo de suspensión. tiempo de 1***2 segundos