Pregunta

Tengo un programa que se ejecuta en unos pocos hilos. El subproceso principal comparte un objeto con los otros subprocesos y, en general, tengo una llamada a:

synchronized(obj){
    do stuff
}

Tengo la sospecha de que el hilo principal está muerto de hambre y no está accediendo a obj . ¿Cómo elevo la prioridad del subproceso principal o ya es más alto que los otros subprocesos de forma predeterminada?

¿Fue útil?

Solución

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

Marque este javadoc .

Estableciendo la prioridad del hilo al máximo:

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

Otros consejos

La serie de artículos aquí indican algunas complejidades en la gestión de prioridades de hilos en varias plataformas.

Me pregunto si tu problema fundamental es simplemente que los subprocesos de trabajo requieren una gran cantidad de CPU y, por lo tanto, rara vez alcanzan un punto en el que, naturalmente, " dejen ir " del procesador (por ejemplo, haciendo algo de IO o durmiendo). Si ese es el caso, puede incluir algunas llamadas a yield () en esos trabajadores, por lo que le da a otros Threads más posibilidades.

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 rápidamente Foo

Editar:

Para responder a su comentario, puede establecer la prioridad máxima utilizando:

bar.setPriority( Thread.MAX_PRIORITY );

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

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

Thread.currentThread().setPriority(priority);

Pero tenga en cuenta, en su ejemplo, que la prioridad de subprocesos no tiene nada que ver en qué orden los subprocesos obtienen acceso a un objeto sincronizado. Java utiliza otros criterios para dar acceso. Consulte, por ejemplo, esto .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top