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()//获得当前线程名字
     
  • 相关阅读:
    docker 的基本使用
    yum 工具安装的程序默认目录与位置
    Tampermonkey 脚本记录
    Windows 安装配置sublime-text3与破解
    heidisql 轻量级工具
    ubuntu 系统配置静态IP地址
    linux 日志分析
    Windows 桌面整理工具
    高效实用Linux命令行
    物联网实验4 alljoyn物联网实验之手机局域网控制设备
  • 原文地址:https://www.cnblogs.com/majestyking/p/12427391.html
Copyright © 2011-2022 走看看