具有同步的多线程示例
以下是按顺序打印计数器值的相同示例,每次运行时都会产生相同的结果.
示例
class PrintDemo { public void printCount() { try { for(int i = 5; i > 0; i--) { System.out.println("Counter --- " + i ); } } catch (Exception e) { System.out.println("Thread interrupted."); } }}class ThreadDemo extends Thread { private Thread t; private String threadName; PrintDemo PD; ThreadDemo(String name, PrintDemo pd) { threadName = name; PD = pd; } public void run() { synchronized(PD) { PD.printCount(); } System.out.println("Thread " + threadName + " exiting."); } public void start () { System.out.println("Starting " + threadName ); if (t == null) { t = new Thread (this, threadName); t.start (); } }}public class TestThread { public static void main(String args[]) { PrintDemo PD = new PrintDemo(); ThreadDemo T1 = new ThreadDemo("Thread - 1 ", PD); ThreadDemo T2 = new ThreadDemo("Thread - 2 ", PD); T1.start(); T2.start(); // wait for threads to end try { T1.join(); T2.join(); } catch (Exception e) { System.out.println("Interrupted"); } }}
每次运行此程序时都会产生相同的结果 :
输出
Starting Thread - 1Starting Thread - 2Counter --- 5Counter --- 4Counter --- 3Counter --- 2Counter --- 1Thread Thread - 1 exiting.Counter --- 5Counter --- 4Counter --- 3Counter --- 2Counter --- 1Thread Thread - 2 exiting.