java學習

          java學習

           

          java future 線程模式

          public interface Data {
          String getResult();
          }
          public class FutureData implements Data{
          protected Data data=null;
          protected boolean f=false;
          public synchronized void setData(Data data) {
          if(f) {
          return;
          }
          f=true;
          this.data=data;
          notifyAll();
          }
          @Override
          public synchronized String getResult() {
          while (!f) {
          try {
          wait();
          } catch (InterruptedException e) {
          e.printStackTrace();
          }
          }
          return data.getResult();
          }
          }
          public class RealData implements Data{
          protected  String s;
          public RealData(String name) {
          StringBuffer sb=new StringBuffer("");
          for (int i = 0; i < 10; i++) {
          sb.append(name);
          try {
          Thread.sleep(1000);
          } catch (InterruptedException e) {
          e.printStackTrace();
          }
          }
          s=sb.toString();
          }
          @Override
          public String getResult() {
          // TODO Auto-generated method stub
          return s;
          }
          }
          public class Client {
          public Data request(final String ss) {
          final FutureData f=new FutureData();
          new Thread() {
          public void run() {
          RealData r=new RealData(ss);//模擬復雜的數據封裝和處理
          f.setData(r);
          };
          }.start();
          return f;
          public static void main(String[] args) {
          Client client=new Client();
          Data d = client.request("123");
          System.out.println(d.getResult());
          }
          }
          public class FutureTest {
          public static void main(String[] args) throws InterruptedException, ExecutionException {
          ExecutorService e=Executors.newFixedThreadPool(11);
          FutureTask<String> f=new FutureTask<>(new Callable<String>() {
          @Override
          public String call() throws Exception {
          Thread.sleep(5000);
          return "aa";
          }
          }); 
          e.submit(f);
          System.out.println(f.get());
          }
          }

          posted on 2019-02-18 10:08 楊軍威 閱讀(125) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 吐鲁番市| 泾川县| 三门县| 梅州市| 朔州市| 泸定县| 闽侯县| 扶沟县| 特克斯县| 盐源县| 开远市| 勐海县| 玉林市| 仲巴县| 安仁县| 山东省| 周宁县| 稷山县| 丰原市| 手游| 通江县| 大冶市| 翼城县| 邮箱| 红安县| 游戏| 乐业县| 女性| 漳州市| 弥渡县| 鹤岗市| 甘德县| 焦作市| 宕昌县| 阜宁县| 镇平县| 喜德县| 普定县| 沾益县| 玛曲县| 庆城县|