Ola,
Tenho dois classes que implementam Runnablem, e que tem o metodo que vao fazer as declaracaoes:
System.out.println(“declaração a1”); //na class Thr
System.out.println(“declaração a2”); //na class Thr
System.out.println(“declaração b1”); //na class ThrB
System.out.println(“declaração b2”); //na class ThrB
Mas, tem que estar na sequencia de maneira que a1 ocurre antes que b2 e b1 occurre antes a2.
Então, eu estou tentando implmentar um sistema como:
Thread Thr
1 declaracao a1
2 aArrived.release();
3 bArrived.acquire();
4. declaracao a2
Thread ThrB
1 declaracao ab
2 bArrived.release();
3 aArrived.acquire();
4. declaracao ab
Mas não funciona de maneira que eu gostaria:
[code]import java.util.concurrent.Semaphore;
import java.util.Random;
public class Thr implements Runnable{
private int id;
public static Semaphore aArrived = new Semaphore(1);
public static Semaphore bArrived = new Semaphore(1);
public Thr(int id){
this.id = id;
}
@Override
public void run(){
try{
executa();
} catch (InterruptedException e){
}
}
public int getID(){
return id;
}
public void executa() throws InterruptedException {
System.out.println("declaração a1");
Thr.aArrived.release();
Thr.bArrived.acquire();
System.out.println("declaração a2");
}
public static void main(String[] args) throws InterruptedException{
Thread t = new Thread(new Thr(1));
Thread t2 = new Thread(new ThrB(1));
t.start();
t2.start();
}
}
[/code]
public class ThrB implements Runnable
{
private int id;
public ThrB(int id){
this.id = id;
}
@Override
public void run() {
try{
executa();
} catch (InterruptedException e){
}
}
public void executa() throws InterruptedException{
System.out.println("declaração b1");
Thr.bArrived.release();
Thr.aArrived.acquire();
System.out.println("declaração b2");
}
public int getID(){
return id;
}
}