<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      crushS  

      多線程(01)

      創(chuàng)建線程方法一

      • 自定義線程類繼承Thread

      • 重寫run()方法,編寫線程執(zhí)行體

      • 創(chuàng)建線程對象,調(diào)用start()方法啟動線程

      package com.kuang.ThreadLesson;
      //線程開啟不一定立即執(zhí)行,由CPU調(diào)度執(zhí)行
      public class TestThread01 extends Thread{
         @Override
         public void run() {
             // run()方法線程體
             for (int i = 0; i < 20; i++) {
                 System.out.println("順利見面---"+i);
            }
        }
      ?
         public static void main(String[] args) {
             //創(chuàng)建一個線程對象
             TestThread01 p = new TestThread01();
             // 調(diào)用start()方法開啟線程
             p.start();
             for (int i = 0; i < 20; i++) {
                 System.out.println("一切順利--"+i);
            }
        }
      }
      ?

      實現(xiàn)多線程同步下載圖片

      package com.kuang.ThreadLesson;
      ?
      import org.apache.commons.io.FileUtils;
      ?
      import java.io.File;
      import java.io.IOException;
      import java.net.URL;
      ?
      // 實現(xiàn)多線程同步下載圖片
      public class TestThread02 extends Thread{
         private String url;
         private String name;
         public TestThread02(String url,String name){
             this.url = url;
             this.name = name;
        }
         // 下載圖片線程的執(zhí)行體
         @Override
         public void run() {
             WebDownloader webDownload = new WebDownloader();
             webDownload.downloader(url,name);
             System.out.println("下載了文件名為:"+name);
        }
      ?
         public static void main(String[] args) {
             TestThread02 t1 = new TestThread02("\thttps://tse4-mm.cn.bing.net/th/id/OIP-C.Rnxb_gFn8661u6XOEjqIDAHaHF?pid=ImgDet&rs=1","t1.jpg");
             TestThread02 t2 = new TestThread02("\thttps://pic3.zhimg.com/v2-44469066400f7f9f5e70f6482c793731_r.jpg?source=1940ef5c","t2.jpg");
             TestThread02 t3 = new TestThread02("\thttps://tse1-mm.cn.bing.net/th/id/R-C.692f6c37f48a…NvDd%2fRRpuTzfIy4P9%2bS1k%3d&risl=&pid=ImgRaw&r=0","t3.jpg");
             t1.start();
             t2.start();
             t3.start();
        }
      }
      // 下載器
      class WebDownloader{
         // 下載方法
         public void downloader(String url,String name){
             try {
                 FileUtils.copyURLToFile(new URL(url),new File(name));
            } catch (IOException e) {
                 e.printStackTrace();
                 System.out.println("IO異常,downloader方法出現(xiàn)問題");
            }
        }
      }

      創(chuàng)建多線程方法二

      • 定義類實現(xiàn)Runnable接口

      • 實現(xiàn)run()方法

      • 創(chuàng)建線程對象,調(diào)用start()方法啟動線程

      小結(jié)

      • 繼承Thread類

        • 子類繼承Thread類具備多線程能力

        • 啟動線程:子類對象.start()

        • 不建議使用:避免OPP單繼承局限性

      • 實現(xiàn)Runnable接口

        • 實現(xiàn)接口Runnable具有多線程能力

        • 啟動線程:傳入目標(biāo)對象+Thread對象.start()

        • 推薦使用:避免單繼承局限性,靈活方便,方便同一個對象被多個線程使用

       

      多個線程同時操作同一個對象

      package com.kuang.ThreadLesson;
      ?
      // 多個線程同時操作同一個對象
      // 買火車票的例子
      // 發(fā)現(xiàn)問題:多個線程操作同一個資源的情況下,線程不安全,數(shù)據(jù)紊亂
      public class TestThread04 implements Runnable{
      ?
         //票數(shù)
         private int ticketNumber = 10;
         @Override
         public void run() {
             while(true){
                 if(ticketNumber<=0){
                     break;
                }
                 // 模擬延時
                 try {
                     Thread.sleep(200);
                } catch (InterruptedException e) {
                     e.printStackTrace();
                }
                 System.out.println(Thread.currentThread().getName()+"買到了第"+ticketNumber--+"張票");
            }
        }
      ?
         public static void main(String[] args) {
             TestThread04 ticket = new TestThread04();
             new Thread(ticket,"小明").start();
             new Thread(ticket,"老師").start();
             new Thread(ticket,"黃牛").start();
        }
      }
      ?

      龜兔賽跑

      package com.kuang.ThreadLesson;
      ?
      // 模擬龜兔賽跑
      public class Race implements Runnable{
         // 勝利者
         private static String winner;
      ?
         @Override
         public void run() {
             for (int i = 0; i <= 100; i++) {
                 // 模擬兔子睡覺
                 if(Thread.currentThread().getName()=="兔子"&&i%10==0){
                     try {
                         Thread.sleep(1);
                    } catch (InterruptedException e) {
                         e.printStackTrace();
                    }
                }
                 // 判斷比賽是否結(jié)束
                 boolean flag = gameOver(i);
                 if(flag){
                     break;
                }
                 System.out.println(Thread.currentThread().getName()+"跑了"+i+"步");
            }
        }
         // 判斷是否完成比賽
         private boolean gameOver(int steps){
             // 判斷是否有勝利者
             if(winner!=null){// 已經(jīng)存在勝利者
                 return true;
            }{
                 if(steps>=100){
                     winner = Thread.currentThread().getName();
                     System.out.println("winner is"+winner);
                     return true;
                }
            }
             return false;
        }
         public static void main(String[] args) {
             Race race = new Race();
             new Thread(race,"兔子").start();
             new Thread(race,"烏龜").start();
        }
      }
      ?

       

      實現(xiàn)Callable接口

      1. 實現(xiàn)Callable接口,需要返回值類型

      2. 重寫call方法,需要拋出異常

      3. 創(chuàng)建目標(biāo)對象

      4. 創(chuàng)建執(zhí)行服務(wù):ExecutorService ser = Executors.newFixedThreadPool(1);

      5. 提交執(zhí)行:Future<Boolean> result1 = ser.submit(t1);

      6. 獲取結(jié)果:boolean r1 = result.get();

      7. 關(guān)閉服務(wù):ser.shutdownNow();

      package com.kuang.Demo02;
      ?
      import jdk.nashorn.internal.codegen.CompilerConstants;
      import org.apache.commons.io.FileUtils;
      ?
      import java.io.File;
      import java.io.IOException;
      import java.net.URL;
      import java.util.concurrent.*;
      //線程創(chuàng)建方式三:實現(xiàn)Callable接口
      /*
      Callable的好處
      1.可以定義返回值
      2.可以拋出異常
      */
      public class TestCallable implements Callable<Boolean> {
         private String url;
         private String name;
         public TestCallable(String url,String name){
             this.url = url;
             this.name = name;
        }
         // 下載圖片線程的執(zhí)行體
         @Override
         public Boolean call() {
             WEbDownloader webDownload = new WEbDownloader();
             webDownload.downloader(url,name);
             System.out.println("下載了文件名為:"+name);
             return true;
        }
      ?
         public static void main(String[] args) throws ExecutionException, InterruptedException {
             TestCallable t1 = new TestCallable("\thttps://tse4-mm.cn.bing.net/th/id/OIP-C.Rnxb_gFn8661u6XOEjqIDAHaHF?pid=ImgDet&rs=1","t1.jpg");
             TestCallable t2 = new TestCallable("\thttps://pic3.zhimg.com/v2-44469066400f7f9f5e70f6482c793731_r.jpg?source=1940ef5c","t2.jpg");
      ?
             //1. 創(chuàng)建執(zhí)行服務(wù)
             ExecutorService ser = Executors.newFixedThreadPool(2);
             //2. 提交執(zhí)行
             Future<Boolean> result1 = ser.submit(t1);
             Future<Boolean> result2 = ser.submit(t2);
             //3. 獲取結(jié)果
             boolean r1 = result1.get();
             boolean r2 = result2.get();
             //4. 關(guān)閉服務(wù)
             ser.shutdownNow();
      ?
      ?
      ?
        }
      }
      // 下載器
      class WEbDownloader{
         // 下載方法
         public void downloader(String url,String name){
             try {
                 FileUtils.copyURLToFile(new URL(url),new File(name));
            } catch (IOException e) {
                 e.printStackTrace();
                 System.out.println("IO異常,downloader方法出現(xiàn)問題");
            }
        }
      }

       

      posted on 2021-08-18 15:53  crushS  閱讀(209)  評論(0)    收藏  舉報
       
      主站蜘蛛池模板: 国产成人一区二区三区在线| 日韩一卡二卡三卡四卡五卡| 在线天堂最新版资源| 波多野结衣久久一区二区| 国产亚洲人成网站在线观看| free性开放小少妇| 最新国产精品亚洲| 亚洲中文字幕第二十三页| 最新国产AV最新国产在钱| 特黄三级又爽又粗又大| 亚洲香蕉免费有线视频| 久热这里只精品视频99| 国产成人精品三上悠亚久久| 亚洲中文字幕日产无码成人片| 国产精品人妻系列21p| jk白丝喷浆| 色成人精品免费视频| 国产特级毛片AAAAAA视频| 云梦县| 免费极品av一视觉盛宴| 内射一区二区三区四区| 狠狠躁夜夜躁人人爽天天5| 日韩精品成人区中文字幕| 亚洲一级片一区二区三区| 国产中文三级全黄| 成年女人黄小视频| 男女18禁啪啪无遮挡激烈网站| 国产裸体永久免费无遮挡| 国产精品露脸3p普通话| 久久96国产精品久久久| 亚洲国产av区一区二| 好姑娘高清影视在线观看| 极品蜜桃臀一区二区av| 鲁一鲁一鲁一鲁一澡| 亚洲天堂男人的天堂在线| 国产精品亚洲二区在线播放| 97欧美精品系列一区二区| 成年午夜无码av片在线观看| 亚洲在线一区二区三区四区| 巨爆乳中文字幕爆乳区| 日本一区二区三区在线播放|