• 实现Runnab接口


    Runnable

    package duoxiancheng;
    
    public class Thread2 implements Runnable{
    
    
        @Override
        public void run() {
            for (int i = 0; i < 200; i++) {
                System.out.println("线程执行");
            }
        }
    
    
    
        public static void main(String[] args) {
            //创建runnable接口的实例对象
            Thread2 thread2 =new Thread2();
            //创建线程对象,通过线程对象开启线程,代理
            Thread thread = new Thread(thread2);
            thread.start();
    
            for (int i = 0; i < 1000; i++) {
                System.out.println("主线程");
            }
        }
    
    
    
    }
    
    

    多线程下载

    package duoxiancheng;
    
    import org.apache.commons.io.FileUtils;
    
    import java.io.File;
    import java.io.IOException;
    import java.net.URL;
    
    public class Thread2 implements Runnable{
    
        String url;
        String name;
        public Thread2(String url,String name){
            this.url=url;
            this.name=name;
        }
    
        @Override
        public void run() {
            Downnn downnn=new Downnn();
            downnn.dodd(url,name);
            System.out.println("下载了:"+name);
        }
    
    
    
        public static void main(String[] args) {
            Thread2 thread1 = new Thread2("https://n.sinaimg.cn/fashion/590/w240h350/20200618/5242-ivffpcs0137589.jpg","1.jpg");
            Thread2 thread2 = new Thread2("https://n.sinaimg.cn/fashion/590/w240h350/20200618/5242-ivffpcs0137589.jpg","2.jpg");
            Thread2 thread3 = new Thread2("https://n.sinaimg.cn/fashion/590/w240h350/20200618/5242-ivffpcs0137589.jpg","3.jpg");
            new Thread(thread1).start();
            new Thread(thread2).start();
            new Thread(thread3).start();
        }
    
        class Downnn{
            public void dodd(String url,String name){
                try {
                    FileUtils.copyURLToFile(new URL(url),new File(name));
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
    
    
        }
    
    
    }
    
    

    多线程抢票程序的问题 线程不安全

    package com.company;
    
    import sun.misc.PostVMInitHook;
    
    public class BuyTicket implements Runnable {
    
    
        private int ticketNum=10;
    
        @Override
        public void run() {
            while (true) {
                if (ticketNum <= 0) {
                    break;
                }
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"拿到了第"+ticketNum--+"张飘");
            }
    
        }
    
        public static void main(String[] args) {
            BuyTicket buyTicket = new BuyTicket();
            new Thread(buyTicket,"小明").start();
            new Thread(buyTicket,"老师").start();
            new Thread(buyTicket,"黄牛党").start();
        }
    
    
    
    }
    
    
    

    输出的结果

    小明拿到了第10张飘
    老师拿到了第9张飘
    黄牛党拿到了第8张飘
    老师拿到了第7张飘
    小明拿到了第6张飘
    黄牛党拿到了第5张飘
    老师拿到了第3张飘
    小明拿到了第4张飘
    黄牛党拿到了第4张飘 出现的问题 票被重复拿了
    黄牛党拿到了第2张飘
    老师拿到了第1张飘

    Buy 写成了Bug嘿嘿

    线程安全买票1 买方法添加synchronized

    package duoxiancheng;
    
    public class BuyTicket implements Runnable {
    
    
        private int ticketNum=10;
    
        @Override
        public synchronized void  run() {
            while (true) {
                if (ticketNum <= 0) {
                    break;
                }
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"拿到了第"+ticketNum--+"张飘");
            }
    
        }
    
        public static void main(String[] args) {
           BuyTicket buyTicket = new BuyTicket();
            new Thread(buyTicket,"小明").start();
            new Thread(buyTicket,"老师").start();
            new Thread(buyTicket,"黄牛党").start();
        }
    
    
    
    }
    

    多线程之龟兔赛跑

    package com.company;
    
    public class Race  implements Runnable{
        private String winner;
        @Override
        public void run() {
            for (int i = 1; i <= 100; i++) {
                //模拟兔子睡觉
                if(Thread.currentThread().getName().equals("兔子") && i%10==0){
                    try {
                        Thread.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                //判断比赛是否结束
                boolean flag=gameOver(i);
                if (flag) {
                    break;
                }
                 System.out.println(Thread.currentThread().getName()+"跑了"+i+"步");
    
            }
        }
    
        public static void main(String[] args) {
                Race race=new Race();
                new Thread(race,"兔子").start();
                new Thread(race,"乌龟").start();
    
        }
    
        public boolean gameOver(int setp){
            if(winner!=null){
                return true;
            }else {
                if(setp==100){
                    winner=Thread.currentThread().getName();
                    System.out.println("winner is "+winner);
                }
            }
            return false;
        }
    
    
    }
    
    兔子跑了1步
    兔子跑了2步
    兔子跑了3步
    兔子跑了4步
    兔子跑了5步
    兔子跑了6步
    兔子跑了7步
    兔子跑了8步
    兔子跑了9步
    乌龟跑了1步
    乌龟跑了2步
    乌龟跑了3步
    乌龟跑了4步
    乌龟跑了5步
    乌龟跑了6步
    乌龟跑了7步
    乌龟跑了8步
    乌龟跑了9步
    乌龟跑了10步
    乌龟跑了11步
    乌龟跑了12步
    乌龟跑了13步
    乌龟跑了14步
    乌龟跑了15步
    乌龟跑了16步
    乌龟跑了17步
    乌龟跑了18步
    乌龟跑了19步
    乌龟跑了20步
    乌龟跑了21步
    乌龟跑了22步
    乌龟跑了23步
    乌龟跑了24步
    乌龟跑了25步
    乌龟跑了26步
    乌龟跑了27步
    乌龟跑了28步
    乌龟跑了29步
    乌龟跑了30步
    乌龟跑了31步
    乌龟跑了32步
    乌龟跑了33步
    乌龟跑了34步
    乌龟跑了35步
    乌龟跑了36步
    乌龟跑了37步
    乌龟跑了38步
    乌龟跑了39步
    乌龟跑了40步
    乌龟跑了41步
    乌龟跑了42步
    乌龟跑了43步
    乌龟跑了44步
    乌龟跑了45步
    乌龟跑了46步
    乌龟跑了47步
    乌龟跑了48步
    乌龟跑了49步
    乌龟跑了50步
    乌龟跑了51步
    乌龟跑了52步
    乌龟跑了53步
    乌龟跑了54步
    乌龟跑了55步
    乌龟跑了56步
    乌龟跑了57步
    乌龟跑了58步
    乌龟跑了59步
    乌龟跑了60步
    乌龟跑了61步
    乌龟跑了62步
    乌龟跑了63步
    乌龟跑了64步
    乌龟跑了65步
    乌龟跑了66步
    乌龟跑了67步
    乌龟跑了68步
    乌龟跑了69步
    乌龟跑了70步
    乌龟跑了71步
    乌龟跑了72步
    乌龟跑了73步
    乌龟跑了74步
    乌龟跑了75步
    乌龟跑了76步
    乌龟跑了77步
    乌龟跑了78步
    乌龟跑了79步
    乌龟跑了80步
    乌龟跑了81步
    乌龟跑了82步
    乌龟跑了83步
    乌龟跑了84步
    乌龟跑了85步
    乌龟跑了86步
    乌龟跑了87步
    乌龟跑了88步
    乌龟跑了89步
    乌龟跑了90步
    乌龟跑了91步
    乌龟跑了92步
    乌龟跑了93步
    乌龟跑了94步
    乌龟跑了95步
    乌龟跑了96步
    乌龟跑了97步
    乌龟跑了98步
    乌龟跑了99步
    winner is 乌龟
    乌龟跑了100步
    
  • 相关阅读:
    ES2017中的修饰器Decorator
    ES6中的模块
    代理(Proxy)和反射(Reflection)
    ES2017中的async函数
    ES6数字扩展
    Promise和异步编程
    ES6定型数组
    ES6数组扩展
    ES6中的类
    ES6中的Set和Map集合
  • 原文地址:https://www.cnblogs.com/itzyz/p/13169805.html
Copyright © 2020-2023  润新知