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

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。

Core Java提供对多线程程序的完全控制.您可以开发一个多线程程序,可以根据您的要求完全暂停,恢复或停止.您可以在线程对象上使用各种静态方法来控制它们的行为.下表列出了这些方法 :

Sr.No.方法&说明
1

public void suspend()

此方法将线程置于挂起状态,并可使用resume()方法恢复.

2

public void stop( )

此方法完全停止线程.

3

public void resume()

此方法恢复使用suspend()方法挂起的线程.

4

public void wait()

导致当前线程等到另一个线程调用notify().

5

public void notify()

唤醒正在此对象监视器上等待的单个线程.

请注意最新的版本Java的sions已经弃用了suspend(),resume()和stop()方法,所以你需要使用可用的替代方法.

示例

class RunnableDemo implements Runnable {   public Thread t;   private String threadName;   boolean suspended = false;   RunnableDemo(String name) {      threadName = name;      System.out.println("Creating " +  threadName );   }      public void run() {      System.out.println("Running " +  threadName );      try {                  for(int i = 10; i > 0; i--) {            System.out.println("Thread: " + threadName + ", " + i);            // Let the thread sleep for a while.            Thread.sleep(300);            synchronized(this) {                              while(suspended) {                  wait();               }            }         }      } catch (InterruptedException e) {         System.out.println("Thread " +  threadName + " interrupted.");      }      System.out.println("Thread " +  threadName + " exiting.");   }   public void start () {      System.out.println("Starting " +  threadName );            if (t == null) {         t = new Thread (this, threadName);         t.start ();      }   }      void suspend() {      suspended = true;   }      synchronized void resume() {      suspended = false;      notify();   }}public class TestThread {   public static void main(String args[]) {      RunnableDemo R1 = new RunnableDemo("Thread-1");      R1.start();      RunnableDemo R2 = new RunnableDemo("Thread-2");      R2.start();      try {         Thread.sleep(1000);         R1.suspend();         System.out.println("Suspending First Thread");         Thread.sleep(1000);         R1.resume();         System.out.println("Resuming First Thread");                  R2.suspend();         System.out.println("Suspending thread Two");         Thread.sleep(1000);         R2.resume();         System.out.println("Resuming thread Two");      } catch (InterruptedException e) {         System.out.println("Main thread Interrupted");      } try {         System.out.println("Waiting for threads to finish.");         R1.t.join();         R2.t.join();      } catch (InterruptedException e) {         System.out.println("Main thread Interrupted");      }      System.out.println("Main thread exiting.");   }}

上述程序产生以下输出 :

输出

Creating Thread-1Starting Thread-1Creating Thread-2Starting Thread-2Running Thread-1Thread: Thread-1, 10Running Thread-2Thread: Thread-2, 10Thread: Thread-1, 9Thread: Thread-2, 9Thread: Thread-1, 8Thread: Thread-2, 8Thread: Thread-1, 7Thread: Thread-2, 7Suspending First ThreadThread: Thread-2, 6Thread: Thread-2, 5Thread: Thread-2, 4Resuming First ThreadSuspending thread TwoThread: Thread-1, 6Thread: Thread-1, 5Thread: Thread-1, 4Thread: Thread-1, 3Resuming thread TwoThread: Thread-2, 3Waiting for threads to finish.Thread: Thread-1, 2Thread: Thread-2, 2Thread: Thread-1, 1Thread: Thread-2, 1Thread Thread-1 exiting.Thread Thread-2 exiting.Main thread exiting.