Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 9186179
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 17, 20262026-06-17T19:27:40+00:00 2026-06-17T19:27:40+00:00

I have a Thread that handles operations in a queue. Basically, loop forever. If

  • 0

I have a Thread that handles operations in a queue. Basically, loop forever. If there are operations in the queue, dequeue an operation and execute it. If there are no operations, wait until you’re told there are.

In pseudo code (ignore critical sections for now):

public class OperationHandler extends Thread {
    private Deque<Operation> queue = new LinkedList<>();
    public void run() {
        while (true) {
            if (queue isn't empty) {
                 dequeue the operation and execute it
            }
            else {
                wait;
            }
        }
    }

    public void operationRequired() {
        add operation to queue
        notify yourself / return to infinite while loop
    }
}

Basically a Controller class initializes this OperationHandler and start()s it. Whenever some requests arrives, the controller calls operationRequired on the thread so that the operations is handled asynchronously in the infinite while loop. Is there any way to achieve this?

I’ve tried with this.wait() and this.notify() but I get either deadlock or IllegalMonitorStateException depending on different synchronized blocks.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-17T19:27:41+00:00Added an answer on June 17, 2026 at 7:27 pm

    How to get a Java Thread to notify itself?

    You can’t get a Thread to notify itself since it is blocked in wait(). You can have another thread notify the thread by synchronizing on the same object that the thread is locking on and calling notify(). See the below code for a sample.

    That said, I’d recommend using a BlockingQueue to share data in this respect. It takes care of all of the locking and signaling. All the thread does is call take() and it will wait for the next operation to be added to the queue with a put().

    Lastly, it’s always recommended to implement Runnable instead of extending Thread. Once you turn your thread into a runnable you can use the ExecutorService classes as @Peter mentions in his answer. With an ExecutorService your code would look like:

     public class OperationHandler implements Runnable {
         public void run() {
            // no looping or dequeuing needed
            // just execute the job
         }
     }
    
     // create a thread pool with a single thread worker
     ExecutorService threadPool = Executors.newSingleThreadExecutor();
     // or create a thread pool with 10 workers
     // ExecutorService threadPool = Executors.newFixedThreadPool(10);
     // or you can create an open-ended thread pool
     // ExecutorService threadPool = Executors.newCachedThreadPool();
     ...
     // do this once or many times
     threadPool.submit(new OperationHandler());
     ...
    

    But if you still want to tweak your code to get it to work:

      private final Object lockObject = new Object();
      public void run() {
         synchronized (lockObject) {
            ...
            lockObject.wait();
         }
      }
    
      // called by another thread
      public void operationRequired() {
         synchronized (lockObject) {
            ...
            lockObject.notify();
         }
      }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a background thread that handles communication with an external service. Each time
I have a thread that does the following: 1) Do some work 2) Wait
In my application I have a user control that do async operations using thread
I have a Manager (main thread), that creates other Threads to handle various operations.
I have one thread that is receiving data over a socket like this: while
I have a thread that downloads some images from internet using different proxies. Sometimes
I have a thread that sends GPS coordinates to a database every six seconds
* So I have a Thread that holds a sleep method and I think
I currently have a thread that I created using CreateRemoteThread(). Everything works great. Upon
In the application I'm developing, I have a thread that is running in a

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.