开发者

Create 2 threads and communicate between them

开发者 https://www.devze.com 2023-03-31 03:15 出处:网络
I want to make a background task in one thread and send information from that thread to another thread which runs the main program and update the information each period of time.

I want to make a background task in one thread and send information from that thread to another thread which runs the main program and update the information each period of time.

Thread1:

public void doTask()
{
    // ...
    someData = ...;
}

Thread2:

SwingUt开发者_如何学Cilities.invokeLater(new Runnable()
{
    public void run()
    {
        new MainFrame(someData);
    }
});

How could I achieve this in java?


Use the Java Concurrency API. Usage of BlockingQueues, Future<> will help you.

Note: This is a classic producer-consumer problem. This can be achieved having a shared queue to hold data where one thread will push data into the queue and the othe will consume the data. Proper synchronisation is needed to achieve a correct solution. BlockingQueue implementations like LinkedBlockingQueue will be helpful.

Update: Part of you problem [the consumer] can be derived from this answer of mine. But this solution uses the simpler wait-notify approach.


I using Executor/ExecutorService, output from these methods starting java.swing.Action (create a new EDT if doesn't exists),

or you can test that For EDT

if (SwingUtilities.isEventDispatchThread()) {...

both ways for your Wratever sould be always in EDT, I vote for wraps output to the GUI into Action


Java doesn't have a direct mechanism for a specific thread to send a message to another SPECIFIC thread.

But there are indirect ways of achieving this though. For example, you can define a message queue object on one thread and then pass a reference to that queue to the second thread. The second thread can insert message objects into this queue; and the first thread can keep polling the queue to get itself alerted to new messages.

Also answered in this thread

Communicating between two threads

The above link has some sample (pseudo) code.


This is maybe an overengineered aproach for this case, but nonetheless you could use EventBus - each Thread could publish and be subsrcibed to events.

An example is here.

0

精彩评论

暂无评论...
验证码 换一张
取 消