Javaマルチスレッド、同時雑記

3790 ワード

マルチスレッドに関連するクラスは、次のクラスに分けられます.
  • 実行可能オブジェクト:最も基本的なマルチスレッド
  • エフェクタ:マルチスレッドプログラミングを簡略化
  • ツールクラス
  • 容器
  • 同時制御
  • 一、実行可能オブジェクト:
    1、Runnable:
    実行単位:Thread
    スレッドを作成する2つの方法(Java API docから):
    class PrimeThread extends Thread {
             long minPrime;
             PrimeThread(long minPrime) {
                 this.minPrime = minPrime;
             }
             public void run() {
                 // compute primes larger than minPrime
                  . . .
             }
         }
    PrimeThread p = new PrimeThread(143);
    p.start();
    class PrimeRun implements Runnable {
             long minPrime;
             PrimeRun(long minPrime) {
                 this.minPrime = minPrime;
             }
             public void run() {
                 // compute primes larger than minPrime
                  . . .
             }
         }
    PrimeRun p = new PrimeRun(143);
    new Thread(p).start();

    Runnableインタフェースは非常に簡単です.
    package java.lang;
    
    public interface Runnable {
        public abstract void run();
    }

    Threadクラスは複雑です
    package java.lang;
    
    public class Thread implements Runnable {   // Thread Runnable, Thread run 。
        . . .
    }

    2、Callable:Runnableに対して、Callableは結果を返し、checked exceptionを投げ出すことができる.
    package java.util.concurrent;
    
    public interface Callable<V> {
        V call() throws Exception;    //  V 
    }

    3、Future:Callableに対して、非同期で実行する操作
    package java.util.concurrent;
    
    public interface Future<V> {
        boolean cancel(boolean mayInterruptIfRunning);
     	boolean isCancelled();
        V get() throws InterruptedException, ExecutionException;
        V get(long timeout, TimeUnit unit)
            throws InterruptedException, ExecutionException, TimeoutException;   
    }

    FutureTask:以上はインタフェースで、これは最初のクラスです.
    Runnable、Futureを実現したので、FutrueTaskをExecutorに捨てることができます.
    二、アクチュエータ:
    Executor:タスクの管理
    package java.util.concurrent;
    
    public interface Executor {
        void execute(Runnable command);    //  Runnable , void。
    }

    ExecutorService:RunnableとCallableを実行し、Future、非同期を返すことができます.shut down、すなわち新しいtaskを拒否することができる. 
    直接実装クラス:ThreadPoolExecutor
    間接実装クラス:ScheduledThreadPoolExecutor.ThreadPoolExecutorと比較して、ScheduledThreadPoolExecutorは、指定された遅延後にコマンドを実行するか、定期的にコマンドを実行するように別途スケジュールできます.
    package java.util.concurrent;
    
    public interface ExecutorService extends Executor {
        void shutdown();
        List<Runnable> shutdownNow();
        boolean isShutdown();
        boolean isTerminated();
        boolean awaitTermination(long timeout, TimeUnit unit)
            throws InterruptedException;
        <T> Future<T> submit(Callable<T> task);
        <T> Future<T> submit(Runnable task, T result);    //  Result ??
        Future<?> submit(Runnable task);
        <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
            throws InterruptedException;
        <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
                                      long timeout, TimeUnit unit)
            throws InterruptedException;
        <T> T invokeAny(Collection<? extends Callable<T>> tasks)
            throws InterruptedException, ExecutionException;
        <T> T invokeAny(Collection<? extends Callable<T>> tasks,
                        long timeout, TimeUnit unit)
            throws InterruptedException, ExecutionException, TimeoutException;
    }

    CompletionService
    続きは...
    三、容器:
    BlockingDeque
    続きは...
    四、同時制御:
    Synchronized
    CountDownLatch
    続きは...
    五、工具類:
    Executors:一部の工場、ツール方法
    refer:
    1、Java同時性とマルチスレッド紹介目次:http://ifeve.com/java-concurrency-thread-directory/