Jason99 ha scritto:
non riesco a svolgere la sincronizzazione della classe Tavolo, usando solo primitive di sistema(wait(), notify(), notifyAll()).
Innanzitutto questo problema "classico", almeno per come è generalmente descritto in letteratura, non contempla una entità "tavolo". Basterebbe solo il tabaccaio. Anche se comunque avere un tavolo non è sbagliato in sé.
Comunque c'è un aspetto che non hai (ancora) considerato. Quando il fumatore invoca tavolo.prendi(), se non riesce ad ottenere i due elementi che gli mancano
dovrebbe andare in sospensione. Ovvero la invocazione di prendi() dovrebbe bloccarsi al suo interno e "ritornare" solo quando riesce ad ottenere i due elementi che gli servono.
Inoltre, il fumatore dopo che ha fumato, dovrebbe "svegliare" il tabaccaio e ripartire quindi in ciclo con l'attesa dei due elementi.