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()//获得当前线程名字
     
  • 相关阅读:
    POJ 1328 Radar Installation
    POJ 1700 Crossing River
    POJ 1700 Crossing River
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3069 Saruman's Army(贪心)
    poj 3069 Saruman's Army(贪心)
    Redis 笔记与总结2 String 类型和 Hash 类型
    数据分析方法有哪些_数据分析方法
    数据分析方法有哪些_数据分析方法
  • 原文地址:https://www.cnblogs.com/majestyking/p/12427391.html
Copyright © 2011-2022 走看看