2016-12-09 1 views
6

Je suis nouveau sur IntelliJ et Java en général. J'essaie d'apprendre le multithreading et je suis tombé sur la classe Executors.IntelliJ ne peut pas résoudre le symbole "newFixedThreadPool"

Je voulais donc tester ceci, voici un exemple de mon code.

import java.util.List; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 


public class LegController { 
    private List<Runnable> legs; 
    private ExecutorService execute; 

    public LegController() { 
     legs = new ArrayList<>(); 
     for (int i = 0; i < 6; i++) { 
      legs.add(LegFactory.getLeg("LEFT")); 
     } 

     execute = new Executors.newFixedThreadPool(6); 
    } 

    public void start(){ 

     //TODO 
    } 
} 

Mais j'obtiens une erreur: "Impossible de résoudre le symbole 'newFixedThreadPool'". J'ai essayé "Invalider le cache et redémarrer" mais cela n'a pas aidé, j'ai essayé de synchroniser et reconstruire le projet, mais cela n'a pas fonctionné non plus.

Je ne comprends pas d'où vient ce problème car la classe Executors est importée. En outre, il y avait l'auto-complétion pour les méthodes statiques d'Executors. Peut-être qu'il y a un problème dans l'importation, mais si oui, comment pourrais-je le réparer?

+0

Je suppose que vous voulez 'execute = Executors.newFixedThreadPool (6);', c'est-à-dire sans le mot-clé 'new', ce qui oblige le compilateur à attendre un appel de constructeur (et n'appelez pas un constructeur). – Thomas

+0

également il n'existe pas de méthode Executors.newSingleThreadExecutor (int). –

Répondre

12

Supprimez le mot clé new dans cette ligne:

execute = new Executors.newFixedThreadPool(6); 

Il devrait être:

execute = Executors.newFixedThreadPool(6); 

La méthode newFixedThreadPool est une méthode statique de classe Executors.

+0

Merci beaucoup, en effet j'ai mis le mot-clé new par réflexe et je ne l'ai donc pas remarqué. – Irindul

1

Retirez le nouveau mot-clé de cette ligne:

execute = Executors.newFixedThreadPool(6); 

Votre syntaxe essaie effectivement d'appeler le constructeur d'une classe interne statique « newFixedThreadPool » au sein de la classe Executor. Cette classe interne statique n'existe pas. Au lieu de cela, vous devez appeler une méthode d'usine statique ...