Implementación de la clase de hilo de simulación: variables compartidas dentro del rango de subprocesos, cada hilo solo puede acceder a él y no puede acceder a otros hilos.
paquete com.ljq.test.thread; AB Módulo * @Author Administrator * * */public shreadscopesharedata {// Preparar los datos compartidos static int data = 0; <Thread, Integer> (); // ahora modifica los datos en el hilo actual, proporcione la información de modificación int data = new Random (). .out.println (Thread.Currenthread (). GetName () + "ha puesto datos:" + Datos); ;}} Clase estática A {public void get () {int data = ThreadData.get (Thread.CurrentThread ()); public void get () {int data = ThreadData.get (Thread.CurrentThread ());
Ejecutar resultados:
El papel y el propósito de Threadlocal:
Para el intercambio de datos en los subprocesos, es decir, para el mismo código de programa, se deben compartir múltiples módulos cuando se ejecutan en el mismo hilo, y otros datos se comparten cuando se ejecutan en otro hilo.
Cada hilo llama al método establecido del objeto Global ThreadLocal, que es equivalente a agregar un registro al mapa interno. Al final del hilo, puede llamar al método ThreadLocal.Clear (), de modo que la memoria se libere más rápido, y está bien llamarlo porque el subproceso también puede liberar automáticamente las variables de TreveLocal relacionadas.
Escenario de aplicación de ThreadLocal:
El procesamiento de pedidos contiene una serie de operaciones: reduzca el inventario, agregue una cuenta en ejecución y modifique la cuenta general. De lo contrario, se envían todas las operaciones, lo que requiere que estas operaciones usen el mismo objeto de conexión de la base de datos, y el código de estas operaciones se encuentra en diferentes clases de módulos.
Las transferencias bancarias incluyen una serie de operaciones: reduzca el saldo de transferencia de la cuenta y aumente el saldo de la transferencia a la cuenta. Operaciones de transferencia El código es el método de dos objetos de cuenta diferentes.
Por ejemplo, el ActionContext de STRUT2, cuando el mismo código se llama y se ejecuta por diferentes hilos, los datos operados por este código son el estado y los datos de cada subproceso. Un hilo, no importa cuántas veces llame al método getContext y el método getContext en el que el módulo en el que el módulo es el mismo.
Casos experimentales: Defina una variable de hilo que se comparte global, y luego inicie múltiples hilos para almacenar un valor aleatorio a la variable de hilo y luego llamar a los otros métodos múltiples de varias otras categorías. , puede ver que varias clases comparten los mismos datos en el mismo hilo.
Para encapsular la variable de TreveLocal, de modo que el mundo exterior no opere directamente la variable de hilo.
Esta aplicación es relativamente rara para el empaque de tipos básicos de datos.
El empaque de los datos de tipo de objeto es más común, es decir, que una determinada clase cree un objeto de instancia independiente para diferentes hilos.
paquete com.ljq.test.thread; Proporcionar un objeto de instancia. <2; ; "Nombre" + Data); El método correspondiente Clase estática A {public void get () {int data = x.get (); );* MyThreadScopedata myData = myThreadScopedata.get (); .getage ()); "," + myData.getage ());}} // Use el método correspondiente de clase estática B {public void get () {int data = x .get (); .Currenthread (). GetMyData: " + myData.getName () +", " + myData.getage ()); rivate myThreadScopedata () {} // Proporcione un método de instancia. No agregue las palabras clave sincronizadas para indicar que los hilos toman sus propios datos, y no interfieran entre sí. El conjunto de datos en el rango de hilo actual está StaticLocal <MyThreadScopedata> MAP = new ThreadLocal <MyThreadScopeEdata> (); .Name = name;} public int getAge () {return Age;} public void setAge (int a age) {this.age = edad;}}}