2017-02-09 1 views
-8

Exception in thread "main" java.lang.IllegalArgumentException
at java.util.concurrent.ThreadPoolExecutor.(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.(Unknown Source)
at java.util.concurrent.Executors.newFixedThreadPool(Unknown Source)
at alerts.email.VinrEmailNotification.main(VinrEmailNotification.java:50)IllegalArgumentException von Executors.newFixedThreadPool()

Dies ist meine Ausnahme. Wie kann ich es lösen? Das ist mein Code:

package alerts.email; 

import java.io.FileInputStream; 
import java.util.Properties; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 
import org.apache.log4j.Logger; 
import org.apache.log4j.PropertyConfigurator; 
import alerts.utils.Constants; 

/** The main entry point for the application which 
* creates a pool of threads for probing the 
* MessagesInTable, messages_sent_table and the 
* retrytable and uses the Java 5 Executor service 
* to run all the threads in the pool as parallel 
* tasks 
* 
* @author Sunil Tuppale 
* @date July-19-2010 
* @version 1.0 
*/ 

public class VinrEmailNotification {  

    static final Logger logger = Logger.getLogger(VinrEmailNotification.class);  
    public static void main(String[] args) {     
     Properties logProperties = null;   
     try {    //settings for logging    
      String fileName = System.getenv("LOG_PROPERTIES_FILE"); 
      if (fileName == null) 
       fileName="vinralerts.properties"; 
      logProperties = new Properties(System.getProperties()); 
      logProperties.load(new FileInputStream(fileName)); 
      PropertyConfigurator.configure(logProperties); 
      logger.debug("Logging initialized in VinrEmailNotification class ");   
     } catch(Exception e) { 
      e.printStackTrace(); 
     }   
     /*   
     * create a thread pool with four threads 
     */   
     int THREAD_POOL_SIZE = ConnectionPoolProvider.getInstance().getThreadPoolSize(); 
     ExecutorService messagesInTableTPExecSvc = Executors.newFixedThreadPool(THREAD_POOL_SIZE); 
     //ExecutorService messagesSentTableTPExecSvc = Executors.newFixedThreadPool(Constants.THREAD_POOL_SIZE); 
     //ExecutorService retryTableTPExecSvc = Executors.newFixedThreadPool(Constants.THREAD_POOL_SIZE); 
     /*   
     * place four tasks in the work queue for the thread pool   */ 
     for(int i = 0; i < THREAD_POOL_SIZE; i++) { 
      messagesInTableTPExecSvc.execute(new MessagesInTableProbe(i)); 
      //messagesSentTableTPExecSvc.execute(new MessagesSentTableProbe(i)); 
      //retryTableTPExecSvc.execute(new RetryTableProbe(i)); 
     } 
     /* 
     * prevent other tasks from being added to the queue 
     */   
     messagesInTableTPExecSvc.shutdown(); 
     //messagesSentTableTPExecSvc.shutdown() 
     //retryTableTPExecSvc.shutdown(); 
     //ConnectionPoolProvider.getInstance().getDataSource().release(); 
    } 
} 
+0

Mögliches Duplikat von [Kompilierfehler: ungültiger Anfang des Ausdrucks] (http://stackoverflow.com/questions/7680528/compile-error-illegal-start-of-expression) –

+0

Wie wäre es mit Formatierung ?! – eol

+2

Bevor Sie Ihren Code veröffentlichen, formatieren Sie ihn bitte immer. Es ist unmöglich, jetzt zu lesen. – BackSlash

Antwort

6

Es bedeutet, dass THREAD_POOL_SIZE 0 oder negativ ist.

Aus der Dokumentation von Executors.newFixedThreadPool(int):

Throws:

IllegalArgumentException - if nThreads <= 0

Die Lösung ist offensichtlich sicher zu stellen, dass ConnectionPoolProvider.getInstance().getThreadPoolSize() eine positive Zahl zurückgibt (mindestens 1). Wie du das machst, glaube ich, dass du es am besten weißt, da es dein eigener Code ist. Oder Sie verwenden einen Standardwert (z. B. 1), wenn der Anbieter keinen gültigen Wert angibt.

Verwandte Themen