Ciao a tutti ragazzi/e , vi scrivo perchè ho un problema con i thread in Java, soprattutto con le parole chiave start, wait, notify e synchronized.
class ThreadB extends Thread
{
int total;
@Override
public void run()
{
synchronized(this)
{
for(int i=0; i<100 ; i++)
{
total += i;
}
notify();
}
}
}
public class ThreadA
{
public static void main(String[] args)
{
ThreadB b = new ThreadB();
b.start(); // avvio il thread b
synchronized(b)
{
try
{
System.out.println("Waiting for b to complete...");
b.wait();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
System.out.println("Total is: " + b.total);
}
}
}
Il primo problema risiede nel metodo start. So dalla teoria che quando avvio un nuovo thread , con start, viene invocato il metodo "run" invece qui non succede, o meglio viene prima stampato "Waiting for b to complete..." e poi entra nella regione sincronizzata del metodo run.
synchronized(this) ==> dovrebbe essere che il thread che arriva in questo blocco ("b" in questo caso?) ottiene il lock di questa regione critica e fa le sue operazioni, ma non capisco perchè c'è "this", cosa vuol dire in questo caso?
b.wait(); ==> b aspetta che un altro thread finisca? Non mi è chiaro, so che c'è almeno un thread in ogni programma (che è quello del main)
notify(); ==> dovrebbe servire per risvegliare un thread (che non so quale sia)
Potete chiarirmi le idee?
Grazie delle eventuali risposte.