• 多线程的练习代码 01


    多线程的练习代码 01

    创建多线程的第一个方式 继承Thread类

    /*
    Thread:
    
    1.创建多线程的第一个方式
    
    2.Thread类你的常用的方法:
       2.1 getName();
       2.2 setName();
       2.3 start():开启一个线程并调用响应的run()执行
       2.4 run();
       2.5 yield(); “贡献”出当前线程对cpu的获取
       2.6 join(); 在a线程中调用b线程的join()方法,那么当b线程完全执行完以后,a线程才可能开始执行
    
     */
    
    
    
    //1. 声明类继承Thread类
    class myThread extends Thread{
    
        //2.重写run()方法,这是创建的多线程的执行的主体
        public void run(){
            for(int i=1;i<101;i++){
                System.out.println(Thread.currentThread().getName()+": "+i);
            }
        }
    }
    
    public class aduoxiancheng {
        public static void main(String[] args) {
            //3.创建继承Thread类的子类的实例
            myThread m1 = new myThread();
            myThread m2 = new myThread();
            //线程命名
            //myThread m1 = new myThread("线程1");
            //myThread m2 = new myThread();
            m2.setName("线程2");
    
            //4.调用对象的start()方法: ①启动线程  ②调用响应线程对应类的run()方法
            m1.start();  //再次 m1.start(); 就会返回非法的线程状态异常
            m2.start();
            //不可以直接用run()方法,并没有新开线程、
    
            for (int i=1;i<=100;i++){
                if(i%10==0){
                    Thread.yield();  //yield(); 贡献出当前线程的执行权
                }
                System.out.println(Thread.currentThread().getName()+": "+i);
            }
    
        }
    
    }
    
    
    /**
     * 三个窗口一起卖100张票
     */
    class  Ticket extends  Thread{
        static int ticket =100;
    
        public  void run(){
            while(true){
                if(ticket>0){
                    System.out.println(Thread.currentThread().getName()+"售票,票号位:" + ticket--);
                }
            }
        }
    }
    
    public class TestTicket {
    
        public static void main(String[] args) {
            Ticket t1 = new Ticket();
            Ticket t2= new Ticket();
            Ticket t3 = new Ticket();
    
            t1.setName("t1窗口");
            t2.setName("t1窗口");
            t3.setName("t1窗口");
    
            t1.start();
            t2.start();
            t3.start();
        }
    }
    
    
    

    创建多线程的第二种方式:实现Runnalble接口

    /**
     *  开启三个窗口买票
     *
     *  创建多线程的第二种方式:实现Runnalble接口
     */
    
    //1. 创建实现Runnable接口的类
    class Ticket1 implements  Runnable{
        int ticket =100;
        //2. 重写Runnable接口中的抽象方法
        public  void run(){
            while(true){
                if(ticket>0){
                    System.out.println(Thread.currentThread().getName() + "售票,票号位:" + ticket--);
                }
            }
        }
    }
    public class TestTicket1 {
        public static void main(String[] args) {
            //3. 创建一个实现接口的子类对象
            Ticket1 t = new Ticket1();
            //4. 将创建的子类对象作为形参传递给Thread类的构造器
            Thread t1 = new Thread(t);
            Thread t2 = new Thread(t);
            Thread t3 = new Thread(t);
    
            t1.setName("t1窗口");
            t2.setName("t2窗口");
            t3.setName("t3窗口");
    
            t1.start();
            t2.start();
            t3.start();
        }
    }
    
    
  • 相关阅读:
    从函数作用域和块级作用域看javascript的作用域链
    基于vue实现一个简单的MVVM框架(源码分析)
    发布-订阅模式
    希尔排序
    直接插入排序
    选择排序
    React Fiber源码分析 第三篇(异步状态)
    React Fiber源码分析 第二篇(同步模式)
    React Fiber源码分析 第一篇
    数据结构 之 树总结
  • 原文地址:https://www.cnblogs.com/liyao0312/p/11620854.html
Copyright © 2020-2023  润新知