001    package escjava.gui;
002    
003    import java.util.LinkedList;
004    
005    public class WindowTasks implements Runnable {
006    
007            public void run() {
008    
009                while (true) {
010                    Object o = getTask();
011                    if (o == null) { Thread.currentThread().yield(); continue; }
012                    // Do something with task
013    
014                }
015    
016            }
017    
018        static private /*@non_null*/ LinkedList tasks = new LinkedList();
019    
020            synchronized static public void addTask(Object o) {
021                    tasks.addLast(o);
022            }
023    
024            synchronized static private Object getTask() {
025                    if (tasks.isEmpty()) return null;
026                    return tasks.removeFirst();
027            }
028    
029    }