zoukankan      html  css  js  c++  java
  • Java多线程(二)实现多线程的三种方法之Thread类

    Java实现多线程的三种方法

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

    一:继承Thread类的步骤:

    1. 继承Thread类
    2. 重写run方法
    3. 调用start方法启动多线程.run是普通方法,只有调用start()方法才能启动多线程。

    注意事项:Thread类里面的run()方法没有返回值,有异常不能Throw只能try-catch

    代码示例:

    以下只是简单例子,这个例子里面存在着同步的问题。

    public class ThreadDemo {
        public static void main(String[] args) {
            System.out.println("一边听音乐...");
    
            Thread p1=new Person();
            p1.start();
        }
    }
    
    class Person extends Thread{
        @Override
        public void run() {
            System.out.println("一边写代码...");
        }
    }

    示例二:

    模拟火车票售票系统

    public class ThreadDemo {
        public static void main(String[] args) {
    
            for (int i = 0; i < 5; i++) {
                new Ticket().start();
            }
        }
    }
    
    class Ticket extends Thread {
        private static int ticketNum = 20;
    
        @Override
        public void run() {
            while (ticketNum > 0) {
                System.out.println(this.getName() + "正在售第" + (ticketNum--) + "张票!");
            }
        }
    }

    运行结果:可以看到同一张票被重复销售了。

    Thread-1正在售第20张票!
    Thread-3正在售第17张票!
    Thread-0正在售第20张票!
    Thread-2正在售第18张票!
    Thread-4正在售第19张票!

    以后会改进这个程序。

    重要参考:

    https://www.cnblogs.com/alltoforever/p/10054686.html

    这个post展示了如何解决模拟火车票售票的线程安全问题

  • 相关阅读:
    springmvc 注解式开发 处理器方法的返回值
    springmvc 注解式开发 接收请求参数
    【洛谷P1379】八数码难题 状压bfs
    【模板】ST表
    【POJ1741】Tree
    【洛谷P1073】最优贸易
    【POJ3662】Telephone Lines dij + 二分答案
    【模板】spfa
    【洛谷P2384】最短乘积路径
    【bzoj2038】小Z的袜子
  • 原文地址:https://www.cnblogs.com/majestyking/p/12426388.html
Copyright © 2011-2022 走看看