thread resueltos prioridad hilos fuente entre ejemplos diferencia codigo java multithreading thread-priority

resueltos - Establecer prioridad a los hilos de Java



prioridad hilos java (5)

Aumentar la prioridad del hilo principal de la manera que dice Macarse probablemente funcione. Sin embargo, confía en que el planificador de hilos preventivos de la plataforma funcione correctamente. En su lugar, debe llamar al método estático Thread.yield() en sus subprocesos de trabajo cuando hayan terminado con las secciones importantes de código que están ejecutando. Este es un buen hábito para entrar incluso cuando usa diferentes niveles de prioridad de subprocesos.

Tengo un programa que se ejecuta en algunos hilos. El hilo principal comparte un objeto con los otros hilos y en el principal tengo una llamada a:

synchronized(obj){ do stuff }

Sospecho que el hilo principal está muerto de hambre y no tiene acceso a obj . ¿Cómo elevo la prioridad del hilo principal o ya es más alto que los otros hilos por defecto?


Como otros ya respondieron, puedes establecer una prioridad para un hilo de la siguiente manera:

Thread.currentThread().setPriority(priority);

Pero tenga en cuenta que, en su ejemplo, esa prioridad de subproceso no tiene nada que ver en qué orden los subprocesos obtienen acceso a un objeto sincronizado. Java usa otros criterios para dar acceso. Ver por ejemplo this .


La serie de artículos here indica algunas complejidades en la gestión de prioridades de subprocesos en diversas plataformas.

Me pregunto si su problema fundamental es simplemente que sus hilos de trabajo consumen mucha CPU y, por lo tanto, rara vez alcanzan un punto en el que naturalmente "sueltan" el procesador (por ejemplo, haciendo algo de IO o durmiendo). Si ese es el caso, entonces podría incluir algunas llamadas a yield () en esos trabajadores, lo que daría a los otros hilos más posibilidades.


Tiene un método setPriority () en la clase Thread.

Mira esto javadoc .

Establecer prioridad de subproceso al máximo:

public static void main(String args[]) { Thread.currentThread().setPriority(Thread.MAX_PRIORITY); // Your main code. }


puedes usar el método setPriority (). Por ejemplo:

new MyThread("Foo").start(); Thread bar = new MyThread("Bar"); bar.setPriority( Thread.NORM_PRIORITY + 1 ); bar.start();

Esto le da a la barra la nueva prioridad que debería tomar control rápidamente Foo

Editar:

Para responder a su comentario, puede establecer la máxima priortiy usando:

bar.setPriority( Thread.MAX_PRIORITY );