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展示了如何解决模拟火车票售票的线程安全问题

  • 相关阅读:
    C# 删除指定目录下的所有文件及文件夹
    C# 数组集合分页 Skip Take
    MongoDB模糊查询 工具
    C# skip 重试执行代码段
    C# 加载配置文件
    消息队列MSMQ的使用
    C#中const和readonly的区别
    JSP页面中的tab页
    使用jquery获取单选按钮radio的值
    JSP页面获取下来框select选中项的值和文本的方法
  • 原文地址:https://www.cnblogs.com/majestyking/p/12426388.html
Copyright © 2011-2022 走看看