Java multithreading issue - Consumer/Producer pattern -


have tried resolve issue proving difficult.

i have 2 threads, 1 producer, , other consumer. in separate classes. 2 threads run independently. producer pooling 8-12 folders inputs. translates files concurrently , place in shared folder called 'readytoload'. once producer thread finishes, consumer threads go 'readytoload' folder , start processing translated documents.

now issue, while consumer processing translated documents, wouldn't allow producer put in more translated files 'readytoload' folder.

my question is, how prevent consumer locking 'readytoload' folder? how can manage situation?

apologies long text feel understand i'm having issues. all.

update : added consumer code (the 1 performs loading , locks file while loading going on)

public class loadmanager { protected static final logger logger = kclogger.getlogger();  arraylist<loader> threads = new arraylist<loader>();  kcblconfig config;  private static final executorservice service = executors.newfixedthreadpool(10);  public loadmanager(kcblconfig config) {     this.config = config;  }  public void start() throws exception {     logger.log(level.info, "starting loading threads.");     try {         treemap<string, connectionhandler> connectionhandlers = config.getconnectionhandlers();         iterator = connectionhandlers.keyset().iterator();         while (i.hasnext()) {              connectionhandler connectionhandler = connectionhandlers.get((string) i.next());              (loadfolder loadfolder : connectionhandler.getkcxmlfolders()) {                loader loader = new loader(loadfolder.getid(), loadfolder, config.getconnectionhandlers());                thread loaderthread = new thread(loader);                 loaderthread.start();                   //service.submit(loader);               // service.shutdown();                //service.awaittermination(1, timeunit.milliseconds);                 threads.add(loader);             }         }     } catch (exception e) {         logger.log(level.severe, "there error starting loaders. stopping loader threads.", e);         this.stop();         throw e;     }     logger.log(level.info, "all loader threads created. there " + threads.size() + " loader threads"); } 

the java producer/consumer idiom done blockingdeque now.

i'd have separate folders producers , consumers. why take on complexity?


Comments