少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
          //實例一,這里面用到了信號量Semaphore和FutureTask

          package net.abin.lee.mythread.callable;

          import java.util.concurrent.Callable;
          import java.util.concurrent.Semaphore;
          import java.util.concurrent.locks.Lock;
          import java.util.concurrent.locks.ReentrantReadWriteLock;

          public class FutureGo implements Callable<String> {
           private String message;
           private static final Semaphore semaphore=new Semaphore(3);
           private final ReentrantReadWriteLock rwl=new ReentrantReadWriteLock();
           public FutureGo(String message) {
            this.message = message;
           }

           public String call() throws InterruptedException {
            semaphore.acquire();
            Lock read=rwl.readLock();
            Lock write=rwl.readLock();
            read.lock();  
            System.out.println("message"+message+",Name"+Thread.currentThread().getName()+"進來了");
            read.unlock();
            write.lock();
            String result=message+"你好!";
            Thread.sleep(1000);
            System.out.println("message"+message+"Name"+Thread.currentThread().getName()+"離開了");
            write.unlock();
            semaphore.release();
            return result;
           }
          }



          //FutureTaskTest.java

          package net.abin.lee.mythread.callable;

          import java.util.concurrent.Callable;
          import java.util.concurrent.ExecutionException;
          import java.util.concurrent.ExecutorService;
          import java.util.concurrent.Executors;
          import java.util.concurrent.FutureTask;

          public class FutureTaskTest {
           public static void main(String[] args) throws InterruptedException,
             ExecutionException {
            Callable<String> go = new FutureGo("abin");
            FutureTask<String> task = new FutureTask<String>(go);
            ExecutorService executor = Executors.newCachedThreadPool();
            if (!executor.isShutdown()) {
             executor.execute(task);
            }
            String result = "";
            if (!task.isDone()) {
             result = (String) task.get();
             System.out.println("result=" + result);
            }
             executor.shutdown();
           }

          }






          //實例一,這里面用到了信號量Semaphore和FutureTask

          posted on 2013-01-10 14:17 abin 閱讀(675) 評論(0)  編輯  收藏 所屬分類: JavaMultithread
          主站蜘蛛池模板: 赣榆县| 商南县| 长乐市| 潢川县| 灌南县| 梓潼县| 丹凤县| 沂南县| 临沂市| 瑞昌市| 云梦县| 邵阳县| 上蔡县| 乐平市| 泰和县| 浦东新区| 江源县| 宜春市| 松阳县| 潮安县| 宁津县| 马公市| 鹿邑县| 裕民县| 西平县| 湾仔区| 鸡东县| 临夏市| 滨海县| 聂拉木县| 通许县| 景泰县| 弋阳县| 林周县| 鸡泽县| 莆田市| 太仓市| 青州市| 舒城县| 扶余县| 科技|