Java Thread Race Condition with BlockingQueue

2014-10-20T21:29:22

I have a potential race condition in my Java code that uses a BlockingQueue, and I'd like to know how to modify the code to avoid it:

private static BlockingQueue<FileToFTP> ftpQueue = new LinkedBlockingQueue<FileToFTP>();

private static boolean shuttingDown = false;

private static FileToFTP pendingFile = null;
private static int uploadsPending = 0;

private static Thread ftpThread = new Thread(new Runnable() { 
            public void run() {
                try {
                    for(;;) {
                        FileToFTP f2f = ftpQueue.take();    // this blocks until there is something to take
                        // FIXME: If the main thread takes over right 
                        // at this instant, then uploadsRemaining() 
                        // is not correct!!
                        uploadsPending = 1;
                        int qs = ftpQueue.size();
                        logIt(qs, f2f);
                        pendingFile = f2f;
                        if(!doUploadFile(f2f.getPath(), f2f.getFilename(), f2f.getRenameTo(), f2f.isBinary())) {
                            if(shuttingDown) {
                                log.info("Upload " + f2f + " failed!");
                            } else {
                                ftpQueue.offer(f2f);    // put it back on to retry later
                            }
                            uploadsPending = 0;
                        } else {
                            pendingFile = null;
                            uploadsPending = 0;
                        }
                        if(qs == 0) logIt("");
                    }
                } catch (InterruptedException consumed) {
                    // Allow thread to exit
                }
            }
        });

public static int uploadsRemaining() {
    return ftpQueue.size() + uploadsPending;
}

Please see the "FIXME" comment in the code. Thanks!!

Copyright License:
Author:「Joe Orost」,Reproduced under the CC 4.0 BY-SA copyright license with link to original source & disclaimer.
Link to:https://stackoverflow.com/questions/26466855/java-thread-race-condition-with-blockingqueue

About “Java Thread Race Condition with BlockingQueue” questions

I have a potential race condition in my Java code that uses a BlockingQueue, and I'd like to know how to modify the code to avoid it: private static BlockingQueue&lt;FileToFTP&gt; ftpQueue = new
I am new to Java multithreading. I am learning the concept of race condition. Based on the Oracle document http://docs.oracle.com/javase/tutorial/essential/concurrency/interfere.html I created a
I've two threads the first one execute some tasks (called TaskManager) and the second listen to events and store them in a queue (called EventManager). EventManager should be woken up and start ru...
I saw a snippet of code in this question which I could not understand (most probably due to the fact am a beginner in this area). The question talks about "an obvious race condition where sometimes...
I am trying to make race condition and fix it with mutex lock. My code is working correct which is no race condition. Should not it make race condition? #define MAX_RESOURCES 10 #include &lt;stdio...
Consider the snippet taken from here: // event public class Event { } // An Event Listener public interface EventListener { public void onEvent(Event e); } // inner class instances contai...
Consider the following code: private static final Object LOCK = new Object(); private static final ExecutorService executorService = Executors.newFixedThreadPool(10); // Also used for a few other ...
I write a java application that starts asynchronous threads to read and update values from the same database. Each thread gets the connection from a connection pool (c3p0). I have to prevent race
I am trying to find out if there is going to be any race condition in this piece of code. If the key weren't 'Thread.currentThread' then I would think yes. But since the thread itself is key, how i...
The definition of a race condition: A race condition or race hazard is a flaw in a system or process whereby the output or result of the process is unexpectedly and critically dependent on the sequ...

Copyright License:Reproduced under the CC 4.0 BY-SA copyright license with link to original source & disclaimer.