[Cocorrenza] esecutore e thread

di il
2 risposte

[Cocorrenza] esecutore e thread


	public static void main(String[] args) throws InterruptedException, ExecutionException {
		ExecutorService exec = Executors.newCachedThreadPool();
		CompletionService<String> pool = new ExecutorCompletionService<String>(exec);
		
		Scanner s = new Scanner(System.in);
		String input ="";
		while(!input.equals("quit")){
			input = s.nextLine();
			Callable<String> c = ()->{
				return search(input);
				
			};
		pool.submit(c);
			
		Future<String> f = pool.poll();
		if(f!=null) System.out.println(f.get());
		}
		
		exec.shutdown();
		
	}
Perchè nell'espressione lambda non posso usare la variabile input?
Risulta efficiente come programmazione concorrente?
La mia idea è quella di poter sempre immettere l'input e nel frattempo i thread siano completati li do in pasto all'esecutore e quando il thread di una ricerca sarà completato mi stampa la ricerca.

2 Risposte

  • Re: [Cocorrenza] esecutore e thread

    Paolovox ha scritto:


    Perchè nell'espressione lambda non posso usare la variabile input?
    Il body di una espressione lambda può accedere a variabili locali del metodo solo se sono marcate final oppure se sono "effectively final" (concetto introdotto in Java 8 ) ovvero non fisicamente marcate final ma che il compilatore è in grado di determinare che sono assegnate una volta sola e non più modificate dal codice.

    JLS 15.27.2. Lambda Body

    "Any local variable, formal parameter, or exception parameter used but not declared in a lambda expression must either be declared final or be effectively final (§4.12.4), or a compile-time error occurs where the use is attempted."
  • Re: [Cocorrenza] esecutore e thread

    Grazie mille. Quindi potrei risolverlo più banalmente creando un thread generatore di Callable che effettua ricerche, ed ogni volta sottomette una ricerca all'esecutore e nel frattempo un ciclo che controlla il completamento dei threads gestiti dall'esecutore.
Devi accedere o registrarti per scrivere nel forum
2 risposte