Implementar sistema de semaforo utilizando THREADS

Tenho que implementar um semaforo utilizando THREADS, onde é necessário imprimir na tela o processo que está executando e uma mensagem do processo que está em espera, dizendo que esse está aguardando, minha dúvida é como testar se esse processo está em espera para poder mostrar a mensagem?
Segue o código que estou desenvolvendo para isso, a principio está muito simples.

import java.io.;
/
Classe que irá implementar o processo de soma, utilizando

  • Threads, conforme gerencia por TSL
    /
    public class Processo1 implements Runnable {
    /
    Atributos de execução */
    private int valor1;
    private int valor2;
    private int resultado;
    public Processo1(){
    valor1 = 5;
    valor2 = 2;
    resultado = 0;
    }

    //Método herdado da interface Runnable utilizado para manipular Threads da linguagem Java
    public void run(){
    //Enquanto este processo estiver acessando a thread será efetuado o processo,
    //e o outro processo fica em espera
    while(true){
    soma();
    subtracao();
    }

    }
    synchronized public void soma(){
    resultado = valor1 + valor2;
    System.out.println(“Processo soma executado = " + resultado);
    System.out.println(“Processo subtracao em espera”);
    System.out.println(”--------------------------------------\n");
    }

    synchronized public void subtracao(){
    resultado = valor1 - valor2;
    System.out.println(“Processo subtracao executado = " + resultado);
    System.out.println(“Processo soma em espera”);
    System.out.println(”--------------------------------------\n");

    }
    }

import java.io.*;
//Classe principal, onde será feita a chamada aos processos
public class SimplesThread2 {
//Método Main
public static void main(String[] args) {
//Instanciando objetos
Processo1 e = new Processo1();
//Instanciando Thread com objetos das classes para poderem serem executados
Thread t = new Thread(e);
t.start();

}

}