package examples; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JLabel; public class ThreadsExample extends JFrame { private static final long serialVersionUID = 1L; void justRun() throws InterruptedException { ProgressLoop prog = new ProgressLoop(); add(prog); display(); prog.run(); } void startAndJoin() throws InterruptedException { ProgressLoop prog = new ProgressLoop(); add(prog); display(); Thread t = new Thread(prog); t.start(); t.join(); } void runTwo() { ProgressLoop prog1 = new ProgressLoop(); add(prog1); ProgressLoop prog2 = new ProgressLoop(); add(prog2); display(); prog1.run(); prog2.run(); } void runTwoAsThreads() throws InterruptedException { ProgressLoop prog1 = new ProgressLoop(); add(prog1); ProgressLoop prog2 = new ProgressLoop(); add(prog2); display(); Thread t1 = new Thread(prog1); Thread t2 = new Thread(prog2); t1.start(); t2.start(); //Thread.currentThread().join(); // NASTY - wait for self to complete t1.join(); t2.join(); } void display() { setLayout(new GridLayout(0,1)); setSize(300,200); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) throws InterruptedException { ThreadsExample x = new ThreadsExample(); x.runTwoAsThreads(); x.setTitle("Final Value = " + ProgressLoop.getSharedValue()); } }