Pergunta

Eu tenho um programa que é executado em alguns tópicos. As principais ações de rosca um objeto com os outros segmentos e na principal Eu tenho um telefonema para:

synchronized(obj){
    do stuff
}

Eu tenho uma suspeita de que o thread principal está faminto e não está recebendo o acesso a obj. Como faço para aumentar a prioridade do thread principal ou é já maior do que as outras threads por padrão?

Foi útil?

Solução

Você tem um método setPriority () na classe Thread.

Verifique este javadoc .

Definir a prioridade do thread no máximo:

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

Outras dicas

A série de artigos aqui indicam algumas complexidades na gestão de prioridades de rosca em várias plataformas.

Gostaria de saber se o seu problema fundamental é simplesmente que os seus segmentos de trabalho são muito intensivo da CPU e, portanto, raramente atingem um ponto onde eles naturalmente "deixar ir" do processador (por exemplo, fazendo algumas IO ou dormir.) Se tal for o caso, então você pode incluir algumas chamadas para yield () nesses trabalhadores, portanto, dando outros Threads mais de uma possibilidade.

Você pode usar o método setPriority (). Por exemplo:

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

Isto dá barrar a nova prioridade que deve tomar rapidamente sobre Foo

Editar:

Para responder seu comentário, você pode definir o priortiy max usando:

bar.setPriority( Thread.MAX_PRIORITY );

Aumentar prioridade a principal do segmento do caminho Macarse diz provavelmente irá funcionar. No entanto, você está confiando em Agendador de thread de preferência da plataforma para funcionar corretamente. em vez disso você deve chamar o método estático Thread.yield() em seus segmentos de trabalho quando eles são feitos com quaisquer seções importantes do código que eles estão executando. Este é um bom hábito de entrar, mesmo quando você estiver usando diferentes níveis de prioridade segmento.

Como outros já respondida, você pode realmente definir a prioridade para um segmento da seguinte forma:

Thread.currentThread().setPriority(priority);

Mas lembre-se, no seu exemplo, que a prioridade thread tem nada a ver em que ordem tópicos tenha acesso a um objeto sincronizado. Java usa outros critérios para dar acesso. Ver, por exemplo este .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top