多线程

1、创建线程

  • 方式一

    继承Thread类,重写run()方法,调用start方法开启线程

    package com.study;
    
    public class TestThread extends Thread{
        public void run(){
            for (int i = 0; i < 100; i++) {
                System.out.println("hello world"+i);
    
            }
        }
    
        public static void main(String[] args) {
            //main线程,主线程
            TestThread testThread = new TestThread();
            testThread.start();
    
            for (int i = 0; i < 200; i++) {
                System.out.println("我是主线程"+i);
    
            }
        }
    }
    
    
  • 方式二

    实现Runnable接口

    package com.study;
    
    public class TestRunnable implements Runnable{
        @Override
        public void run() {
            for (int i = 0; i < 30; i++) {
    
                System.out.println("hello world"+i);
    
            }
        }
    
        public static void main(String[] args) {
            TestRunnable testRunnable = new TestRunnable();
            new Thread(testRunnable).start();
    
            for (int i = 0; i < 60; i++) {
                System.out.println("主线程"+i);
            }
        }
    }
    
    

    2.练习1: 实现多线程同步下载图片

    package com.study;
    
    import org.apache.commons.io.FileUtils;
    import org.omg.CORBA.StringHolder;
    
    import java.io.File;
    import java.io.IOException;
    import java.net.URL;
    
    public class TestThread2 extends Thread{
        private String url; //图片地址名
        private String name;  //定义图片名
    
        public TestThread2(String url, String name){
            this.url = url;
            this.name = name;
        }
    
        public void run(){
            WebDownloader webDownloader = new WebDownloader();
            webDownloader.downloader(url,name);
            System.out.println("下载文件名:"+name);
        }
    
        public static void main(String[] args) {
            TestThread2 t1 = new TestThread2("https://img2020.cnblogs.com/blog/1887105/202103/1887105-20210312200240114-635118268.png","1.png"); 
            TestThread2 t2 = new TestThread2("https://img2020.cnblogs.com/blog/1887105/202103/1887105-20210312200300521-827686531.png","2.png");
            t1.start();
            t2.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("捕获异常");
            }
    
        }
    }
    
    

    3.练习2:龟兔赛跑

    package com.study;
    
    public class Race implements Runnable{
    
        private static String winner;  //静态变量
        @Override
        public void run() {
            //100米赛道
            for (int i = 1; i <= 100; i++) {
                System.out.println(Thread.currentThread().getName()+"跑了"+i+"米");
                if (gameOver(i)){
                    break;
                }
                if (Thread.currentThread().getName().equals("rabbit") && i%10==0){
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
    
            }
    
    
        }
    
        //判断游戏结束
        public boolean gameOver(int step){
            boolean flag=false;
            if (step >= 100){
                winner = Thread.currentThread().getName();
                System.out.println("winner is "+winner);
            }
            if (winner!=null){
                flag = true;
            }
            return flag;
        }
    
        public static void main(String[] args) {
            //一条赛道
            Race race = new Race();
    
            new Thread(race,"rabbit").start();
            new Thread(race,"turtle").start();
    
    
        }
    
    
    }
    
    

    4.静态代理模式

    package com.study;
    //静态代理模式
    public class StaticProx {
    }
    
    interface Marry{
    
        public void HappyMarry();
    }
    
    class You implements Marry{
    
        @Override
        public void HappyMarry() {
            System.out.println("I'm very happy!");
        }
    }
    
    class WeddingCompany implements Marry{
    
        private  Marry target;
        WeddingCompany(Marry target){
            this.target = target;
        }
        @Override
        public void HappyMarry() {
    
            before();
            this.target.HappyMarry();
            after();
        }
    
        private void after() {
            System.out.println("结婚后,收尾款");
        }
    
        private void before(){
            System.out.println("结婚前,布置现场");
        }
    
        public static void main(String[] args) {
    //        You you = new You();
    //        WeddingCompany weddingCompany = new WeddingCompany(you);
    
            WeddingCompany weddingCompany = new WeddingCompany(new You());
            weddingCompany.HappyMarry();
        }
    }
    
    
    
posted @ 2021-03-12 22:05  爱睡觉的卡比兽  阅读(30)  评论(0)    收藏  举报