2012-03-05 2 views
0

У меня ниже 2 классов. Различные клиенты называют TestThreadPool, который, в свою очередь, вызывает TestThreadExecutor для доступа ExecutorService. Таким образом, проблема заключается в том, что ThreadPool никогда не запускается, поскольку он всегда создает новый TestThreadExecutor.static ExecutorService

Итак, я хотел бы установить executeThreadExecutor в качестве статического метода для запуска threadPool. Есть ли проблема с статическим методом и статическим ExecutorService?

Есть ли другой альтернативный способ, например, одинарный и т. Д.?


public class Client { 
    ... 
    TestThreadPool testThreadPool = new TestThreadPool(); 
    ... 
} 

public class TestThreadPool { 
    public void executeThread() { 
    TestThreadExecutor test = new TestThreadExecutor(); 
    ... 
    } 
} 

public class TestThreadExecutor { 
    public static ExecutorService testService = null; 

    public static void executeThreadExecutor { 
    if (testService == null) {  
     testService = Executors.newFixedThreadPool(15); 
    } 
    ... 
    } 
} 

ответ

0

Вы подход кажется нормально, и нет никаких проблем с ним, хотя я не вижу никаких причин, чтобы сделать ExecutorService общественности, так как вы управляете его через метод класса, который лучше для инкапсуляции. Конечно, вы можете реализовать TestThreadExecutor в качестве одноэлементного:

public class TestThreadExecutor { 
    private ExecutorService testService = Executors.newFixedThreadPool(15); 
    private static TestThreadExecutor instance = new TestThreadExecutor(); 

    private TestThreadExecutor() { 
    } 

    public static TestThreadExecutor getInstance() { 
     return instance; 
    }   
} 
+1

Почему вы устанавливаете testService в конструкторе? почему бы просто не установить его прямо? запутать статические переменные в конструкторе класса. – jtahlborn

+0

@jtahlborn: Я согласен, теперь, когда я думаю об этом, это немного запутанно. – Tudor

+0

Спасибо. Это очень полезно для меня. Я хотел бы поставить executorService.shutdown(). Где мне это? Это в блоке catch? Я попытался положить его, наконец, он не принимает новые задачи. – user12121