Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-02-2012, 15:35   #1
Lelex82
Member
 
Iscritto dal: Mar 2006
Città: Napoli
Messaggi: 170
[Java] sincronizzazione wait-notify

Ragazzi non riesco proprio a capire perchè non mi funziona il metodo this.notifyAll (); richiamato in setAutorizzazione(); della classe ServizioFondoComune.
dovrebbe sbloccarmi tutti 3D che sono in wait nel primo while, ma questo non succede...dov'è che sbaglio?

setAutorizzazione () è richiamato da un metodo che si trova in un 3D Amministratore, che ha lo scopo di permettere il prelievo da una delle due casse del Fondo Comune, in particolare della cassaSecondaria.


package server;
public class ServizioFondoComune {

private int cassaPrincipale;
private int cassaSecondaria;
private final static int LIMITE_CASSA_SECONDARIA=100000;
private boolean autorizzazione=false;
public ServizioFondoComune() { //COSTRUTTORE
cassaSecondaria=0;
cassaPrincipale=0;
}

public synchronized int getCassaPrincipale (){
return cassaPrincipale;
}

public synchronized void setCassaPrincipale (int q){
cassaPrincipale=cassaPrincipale+q;
System.out.println ("CassaPrincipale= "+cassaPrincipale);
}

public synchronized int getCassaSecondaria (){
return cassaSecondaria;
}
public synchronized void setCassaSecondaria (int q){
cassaSecondaria=cassaSecondaria+q;
System.out.println ("CassaSecondaria= "+cassaSecondaria);
}

public synchronized void deposito (int quantità) { //synchronized perchè il deposito deve essere effettuato da un 3D alla volta
// se così non fosse, ci sarebbe una condizione di RACE CONDITION
if (quantità+getCassaSecondaria()<LIMITE_CASSA_SECONDARIA){
setCassaSecondaria(quantità);
if (autorizzazione)
this.notifyAll(); //mi sblocca il wait sulla cassa secondaria
}

else { //supero il limite superiore con un deposito
int quantPerRaggiungereLimite=LIMITE_CASSA_SECONDARIA-getCassaSecondaria();

setCassaSecondaria(quantPerRaggiungereLimite); //qui la cassaSecondaria dovrebbe raggiungere 1000
int eccedenzaDaAGGCassaPrincipale=quantità-quantPerRaggiungereLimite;
setCassaPrincipale(eccedenzaDaAGGCassaPrincipale);

}

}



public synchronized void prelievo (int quantità) {

if (getCassaPrincipale()-quantità>=0){ //prelievo normale
System.out.println ("Prelievo dalla cassa Principale...");
setCassaPrincipale(-(quantità));
}
else { //vuol dire che la cassaPrincipale si svuota e devo ricorrere alla cassaSecondaria
int prelevareDaCassaSecondaria=quantità-getCassaPrincipale();
setCassaPrincipale(-getCassaPrincipale()); //pone a 0 la cassa principale
System.out.println ("Prelievo dalla cassa Secondaria...");
while (getAutorizzazione()==false){ //l'amministatore non da il permesso di Prelevare dalla cassa Secondaria

//Ora devo prelevare dalla cassaSecondaria previa autorizzazione dell'amministratore

try {
System.out.println ("wait AUTORIZZAZIONE...");
this.wait (); //aspetta che il
System.out.println ("DOPO IL WAIT dell'AUTORIZZAZIONE il notify funziona!");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


} //fine while
System.out.println ("SUPERO IL PRIMO WHILE!!!...");
while (getCassaSecondaria()-prelevareDaCassaSecondaria<0){
try {
System.out.println ("wait PRELIEVO...");
this.wait();
System.out.println ("DOPO IL WAIT del PRELIEVO il notify funziona!");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} //fine while


//System.out.println ("DOPO IL WAIT il notify funziona!");
// setCassaSecondaria(-(prelevareDaCassaSecondaria));

}

}


public synchronized void setAutorizzazione(boolean b) {
// TODO Auto-generated method stub
autorizzazione=b;

notifyAll(); //non notifica un cazzo? PERKééééééééééééééééééééééééééééé
System.out.println ("Stato AUTORIZZAZIONE----->"+autorizzazione);
System.out.println ("HO FATTO IL NOTIFYYYY");

}



public boolean getAutorizzazione (){
System.out.println ("Stato AUTORIZZAZIONE in get----->"+autorizzazione);
return autorizzazione;
}

}


Amministratore invece l'ho implementata così:
package server;

import java.util.Random;

public class Amministratore extends Thread{

ServizioFondoComune sFC=null;

public Amministratore (ServizioFondoComune servizio){
sFC=servizio;
}

public void autorizza () {
System.out.println ("AUTORIZZAZIONE EFFETTUATA");
sFC.setAutorizzazione (true);
}

public void run (){
Random r=new Random();
System.out.println ("Avvio del conteggio della generica richiesta dell'Amministratore");

int sec=0;

try {
//sec=r.nextInt(11)*1000; //da 0 a 10 secondi ( da 0 a 10000 millisecondi)
// sleep (sec);
sleep (5000);

} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

this.autorizza();
}

}
Lelex82 è offline   Rispondi citando il messaggio o parte di esso
Old 19-02-2012, 16:00   #2
Lelex82
Member
 
Iscritto dal: Mar 2006
Città: Napoli
Messaggi: 170
ho risolto,
creavo due istanze diverse della classe ServizioFondoComune in un Server Main per quello i notify non funzionavano, si riferivano a oggetti diversi...

potete anche chiudere o eliminare.
Grazie
Lelex82 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
E-mail reset password di Instagram: la c...
La NASA ha discusso le problematiche del...
Il razzo spaziale NASA SLS e la capsula ...
Stazione Spaziale Internazionale: Crew-1...
Samsung Galaxy S26 Ultra: la ricarica de...
Apple ha un nuovo partner per la sua App...
Trenitalia introduce il prezzo dinamico ...
OnePlus non si ferma più: c'&egra...
DAZN sconta il piano Full per 6 mesi, se...
L'uso dell'IA nei giochi è cancer...
Meta punta sul nucleare USA per alimenta...
Le migliori offerte Amazon del weekend: ...
La crisi dell'hardware spinge i negozi g...
Apple Watch SE 3 scontato su Amazon: il ...
Robot aspirapolvere davvero scontati: si...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:33.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v