zoukankan      html  css  js  c++  java
  • Java多线程(三)实现多线程的三种方法之Runnable接口

    Java实现多线程的三种方法

    •     继承Thread类
    •     实现Runnable接口
    •     实现Callable接口,这JUC并发包下的,属于比较高级的用法

    这里讲的是第二种方法.

    本篇内容:

    1. 演示如何通过Runnable接口实现多线程
    2. 演示多线程模拟龟兔赛跑

    1. 通过实现Runnable接口

    public class ThreadDemo {
        public static void main(String[] args) {
    
            //创建Runnable接口的实现类对象
            TicketWinow tw = new TicketWinow();
            //创建代理类,并把实现类对象作为参数传给代理类的构造方法
            Thread t = new Thread(tw, "Windows00");
            t.start();
            //下面的循环只是把上面的两步合并成一步而已
            for (int i = 0; i < 5; i++) {
                new Thread(new TicketWinow()).start();
            }
        }
    }
    
    class TicketWinow implements Runnable {
    
        private static int ticketNum = 50;
    
        //重写run()方法
        @Override
        public void run() {
            while (ticketNum > 0) {
                System.out.println(Thread.currentThread().getName() + "正在售第" + (ticketNum--) + "张票!");
            }
        }
    }

    2.用Runnable接口实现多线程模拟龟兔赛跑

    public class ThreadDemo {
        public static void main(String[] args) throws InterruptedException {
            Racer racer = new Racer();
            new Thread(racer, "乌龟").start();
            new Thread(racer, "兔子").start();
        }
    }
    
    class Racer implements Runnable {
        private String winner;
    
        //重写run()方法
        @Override
        public void run() {
            for (int step = 0; step <= 100; step++) {
                //模拟让兔子睡觉
                if(Thread.currentThread().getName().equals("兔子") && step%10==0 ){
                    try {
                        Thread.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println(Thread.currentThread().getName() + "跑了第" + step + "步.");
                boolean flag = isGameOver(step);
                if (flag) {
                    break;
                }
            }
        }
    
        public boolean isGameOver(int steps) {
            if (winner != null) {
                return true;
            } else {
                if (steps == 100) {
                    winner = Thread.currentThread().getName();
                    System.out.println("胜利者是:" + winner);
                    return true;
                }
            }
            return false;
        }
    }

    重点:

    Thread.sleep(int i);//暂停线程i秒
    Thread.currentThread().getName()//获得当前线程名字
     
  • 相关阅读:
    Ubuntu 18.04安装gcc、g++ 4.8
    Java 接口返回值集合防止空指针
    Linux CentOS7.9环境下搭建Java Web 环境
    Springboot集成UReport2
    linux 环境中 单独执行 python 脚本
    sql 注入的问题
    检验上传文件的大小
    Gunicorn使用讲解
    CentOS下安装部署对象存储服务MinIO
    阿里云CentOS7安装MySQL
  • 原文地址:https://www.cnblogs.com/majestyking/p/12427391.html
Copyright © 2011-2022 走看看