Não estou conseguindo utilizar Filas com prioridade PriorityQueue

Olá pessoal, esta acontecendo uma anomalia no meu código.
Quando estou fazendo um exercicio que necessita utilizar “Queues” com comportamento “fifo” ai preciso utilizar “PriorityQueue” certo ?
Mas quando mando ela enfileirar ela enfileira errado. mesmo eu fazendo a implementação do “Compareble” na Classe e tbm tentei com Classe anonimas com “Comparator”.
O exercício é criar um sistema de atendimento de uma UBS/UPA onde simplesmente é necessário enfileirar com 3 prioridades endo ela Verde = 2, amarelo = 1 e vermelho = 0. E desenfileirar atendendo “Atendendo primeiro” os vermelho em seguida amarelos e depois verdes. Segue meu código:

--------------------------Classe Paciente -------------------------------------------
public class Paciente implements Comparable{
private String nome;
private int codigo;
private String queixa;
public Paciente(String nome, int codigo, String queixa) {
super();

	this.nome = nome;
	this.codigo = codigo;
	this.queixa = queixa;
}

// aqui ficam todos os gets e sets
@Override
public int compareTo(Paciente o) {
if(codigo > o.codigo) {
return 1;
}else if(codigo < o.codigo) {
return -1;
}
return 0;
}
--------------------------Classe Testes com Main -------------------------------------------
public class Teste {
static SecureRandom sr = new SecureRandom();
static Queue queue = new PriorityQueue<>(
/new Comparator() {
@Override
public int compare(Paciente p1, Paciente p2) {
return Integer.valueOf(p1.getCodigo()).compareTo(p2.getCodigo());
}
}
/
);
static final int MAX = 10;
static final int VERDE = 2;
static final int AMARELO = 1;
static final int VERMELHO = 0;

public static void main(String[] args) {
	queue.add(new Paciente("Pamela", VERDE, "Sintomas de Gripe"));
	queue.add(new Paciente("Camila", VERDE, "Sintomas de Gripe"));
	queue.add(new Paciente("Caio", VERDE, "Sintomas de Gripe"));
	queue.add(new Paciente("Marcel", VERMELHO, "Dor ebdominal"));
	queue.add(new Paciente("Timotio", AMARELO, "Queda"));
	queue.add(new Paciente("Pati", AMARELO, "Dores fortes na cabeça"));
            queue.add(new Paciente("Marcel", VERMELHO, "Dor ebdominal"));
	//geraPaciente(5);

	System.out.println(queue);

}
public static Queue<Paciente> geraPaciente(int quant) {
	if(quant <= 0) {
		return queue;
	}
	
	int randol = (int)(sr.nextDouble()*MAX);
	getPaciente(randol);
	return geraPaciente(quant -=1);
}
private static void getPaciente(int key) {
	Paciente paciente = null;
	switch (key) {
	case 1:
		queue.add(new Paciente("Marcel", VERMELHO, "Dor ebdominal"));
		break;
	case 2:
		queue.add(new Paciente("Raquel", VERMELHO, "Fratura exposta"));
		break;
	case 3:
		queue.add(new Paciente("Marcos", AMARELO, "Atropelamento"));
		break;
	case 4:
		queue.add(new Paciente("Paulo", AMARELO, "Dor nas pernas"));
		break;
	case 5:
		queue.add(new Paciente("Felipe", VERDE, "Dor de cabeça"));
		break;
	case 6:
		queue.add(new Paciente("Mateus", VERDE, "Dor de cabeça"));
		break;
	case 7:
		queue.add(new Paciente("bruno", AMARELO, "queda de bicicleta"));
		break;
	case 8:
		queue.add(new Paciente("carol", VERDE, "Bronquite atacada"));
		break;
	case 9:
		queue.add(new Paciente("caio", VERDE, "Sinusite atacada"));
		break;

	default:
		paciente = new Paciente("maria", VERDE, "Sintomas de Gripe");
		break;
	}
}

}
------------------------------------Comentarios finais -----------------------------------------
quando eu habilito o metodo geraPaciente ele não gera na ordem.
e se eu comentar :
//queue.add(new Paciente(“Marcel”, VERMELHO, “Dor ebdominal”));
O codigo enfileira corretamente