开发手册 欢迎您!
软件开发者资料库

Java并发 - 同步

Java并发同步 - 从简单和简单的步骤学习Java并发,从基本到高级概念,包括概述,环境设置,主要操作,线程通信,同步,死锁,ThreadLocal,ThreadLocalRandom,Lock,ReadWriteLock,Condition,AtomicInteger,AtomicLong, AtomicBoolean,AtomicReference,AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray,Executor,ExecutorService,ScheduledExecutorService,newFixedThreadPool,newCachedThreadPool,newScheduledThreadPool,newSingleThreadExecutor,ThreadPoolExecutor,ScheduledThreadPoolExecutor,Futures and Callables,Fork-Join框架,BlockingQueue,ConcurrentMap,ConcurrentNavigableMap。

具有同步的多线程示例

以下是按顺序打印计数器值的相同示例,每次运行时都会产生相同的结果.

示例

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.