Question: 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:

```
SwingUtilities.invokeLater(new Runnable()
{
    public void run()
    {
        new MainFrame(someData);
    }
});

```

How could I achieve this in java?

Answer: 
I using [Executor](http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html)/[ExecutorService](http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html), output from these methods starting [java.swing.Action](http://download.oracle.com/javase/tutorial/uiswing/misc/action.html) (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`
Use the [Java Concurrency API](http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/package-summary.html). Usage of `BlockingQueue`s, `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](https://stackoverflow.com/questions/6301186/how-to-stop-a-thread-in-java-and-let-the-same-thread-to-do-another-thing/6302642#6302642) answer of mine. But this solution uses the simpler `wait`-`notify` approach.