/** * * Ritorna un elemento da analizzare oppure -1 se non ve ne è uno disponibie entro 3 secondi * dalla richiesta * * @return * @throws RemoteException */ @Override public int getJob() throws RemoteException { if (LOG_VERBOSE) { System.out.println("Un Assistant richiede un lavoro... " + elementToCalculateQueue.size()); } if (USE_SLEEP) { try { Thread.sleep(3000); } catch (InterruptedException ex) { } } int element = elementToCalculateQueue.poll(2, TimeUnit.SECONDS); if (element == Integer.MIN_VALUE) { return -1; } if (LOG_VERBOSE) { System.out.println("Assegno all'Assistant il calcolo di: " + element); } return element; }
/** * * Permette di ottenere un massimo comun divisore di un numero passato in precedenza. Il metodo * è bloccante, il thread rimane in attesa fino a quando non è presente un numero * * @return l'mcd calcolato */ public int getElementToAnalyze() { int element = elementToAnalyzeQueue.take(); return element; }
/** * * Richiede il calcolo del massimo comun divisore per l'elemento passato come parametro * * @param element */ public void calculateDivisor(int element) { elementToCalculateQueue.add(element); }
/** * * Permette a gli assistant di ritornare l'mcd di un numero elaborato * * @param divisor * @throws RemoteException */ @Override public void sendResult(int divisor) throws RemoteException { elementToAnalyzeQueue.add(divisor); }