zoukankan      html  css  js  c++  java
  • 多线程

    继承Thread类

    1  子类继承Thread类具备多线程能力

    2  启动线程:子类对象.start()

    3  不建议使用:避免OOP但继承局限性。

    public class ThreadTest extends Thread {
        @Override
        public void run() {
            for (int i = 0; i < 50; i++) {
                System.out.println("这里是run方法。。。。。"+i);
    
            }
        }
    
        public static void main(String[] args) {
            ThreadTest t1=new ThreadTest();
            t1.start();
            for (int i = 0; i < 200; i++) {
                System.out.println("这里是主方法。。。。、、、、"+i);
            }
        }
    }

    实现Runnable接口

    1 实现接口Runnable具有多线程能力

    2 启动线程:传入目标对象+Thread对象.start()

    3 推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用

    但此是线程不安全的,会出现同资源被多个线程使用,造成混乱。

    // 买火车票,同一个对象(火车票),被多个线程(多个人买)使用。但此是线程不安全的,运行后出现同一张票被多个人买到的情况。
    
    public class BuyTicketThread implements Runnable{
        private int ticketNums=10;
    
        @Override
        public void run() {
            while (true) {
                if (ticketNums <= 0) {
                    break;
                }
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"-->拿到了第"+ticketNums--+"张票");
            }
        }
    
        public static void main(String[] args) {
    //一份资源 BuyTicketThread buyTicketThread
    = new BuyTicketThread();
    //多个代理
    new Thread(buyTicketThread,"小龙").start(); new Thread(buyTicketThread,"老师").start(); new Thread(buyTicketThread,"黄牛党").start(); } }

    案例:模拟龟兔赛跑

    1 首先来个赛道距离,然后离终点越来越近
    2 判断比赛是否结束
    3 打印出胜利者
    4 比赛开始
    5 故事中乌龟总是赢的,兔子要睡觉,所以来模拟兔子睡觉
    6 终于,乌龟赢得了比赛
    public class Race implements Runnable {
    
        //胜利者
        private static String winner;
    
        @Override
        public void run() {
            for (int i = 0; i <=100 ; i++) {
                //模拟兔子休息
                if (Thread.currentThread().getName().equals("兔子") && i % 10 == 0) {
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                //判断比赛是否结束
                boolean flag = gameOver(i);
                //如果比赛结束了,就停止程序
                if (flag) {
                    break;
                }
                System.out.println(Thread.currentThread().getName()+"-->跑了"+i+"步");
            }
        }
    
        //判断是否完成比赛
        private boolean gameOver(int steps) {
            //判断是否有胜利者
            if (winner != null) {
                return true;
            }else {
                if (steps >= 100) {  // 已经有胜利者了
                    winner=Thread.currentThread().getName();
                    System.out.println("Winner is " + winner);
                    return true;
                }
            }
            return false;
        }
        public static void main(String[] args) {
            Race race=new Race();
            new Thread(race,"兔子").start();
            new Thread(race,"乌龟").start();
        }
    }
  • 相关阅读:
    http协议头文件的控制信息 .
    http头文件详解
    java(计算机)常见加密算法详解
    设计模式系列命令模式
    dom对象模型浏览器对象的分层结构图
    验证码实现详解
    JAVA中使用FTPClient实现文件上传下载
    javax.crypto.Cipher类提供加密和解密功能,该类是JCE框架的核心。
    java中的使用RSA算法进行公钥加密私钥解密 .
    Httpservlet源码及实现机制详解
  • 原文地址:https://www.cnblogs.com/dragon-lan/p/14065712.html
Copyright © 2011-2022 走看看