2016-12-09 5 views
6

私はIntelliJとJavaの方が一般的です。 私はマルチスレッドを学びたいと思っています。私はExecutorsクラスに出くわしました。IntelliJは "newFixedThreadPool"というシンボルを解決できません

私はこれをテストしたかったので、ここに私のコードのサンプルがあります。

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 
    } 
} 

ただし、「newFixedThreadPool 'を解決できません」というエラーが表示されます。 私は "キャッシュを無効にして再起動"しようとしましたが、助けにならなかったので、プロジェクトを同期して再構築しようとしましたが、どちらもうまくいきませんでした。

Executorsクラスがインポートされるため、この問題の原因がわかりません。さらに、Executorsの静的メソッドの自動補完もありました。 輸入に問題があるかもしれませんが、もしそうなら、どうすれば修正できますか?

+0

'execute = Executors.newFixedThreadPool(6);'、つまり 'new'キーワードがないと、コンパイラはコンストラクタ呼び出しを期待します(コンストラクタを呼び出さないでください)。 – Thomas

+0

Executors.newSingleThreadExecutor(int)メソッドもありません。 –

答えて

12

この行にキーワードnewを削除します。

execute = new Executors.newFixedThreadPool(6); 

をそれは次のようになります。

execute = Executors.newFixedThreadPool(6); 

方法newFixedThreadPoolは、クラスExecutorsの静的メソッドです。

+0

本当にありがとう、実際には私は反射的に新しいキーワードを入れて、それに気付かなかった。 – Irindul

1

はこのラインから新しいキーワードを削除します。

execute = Executors.newFixedThreadPool(6); 

をあなたの構文は、実際に執行クラス内の静的内部クラスのnewFixedThreadPool "のコンストラクタを呼び出すようにしようとします。その静的内部クラスは存在しません。代わりに、静的ファクトリメソッドを呼び出さなければなりません...

関連する問題