zoukankan      html  css  js  c++  java
  • java多线程-基础

    1. 基本用法

    总共两种,

    第一种:继承Runnbale接口,实现run方法

    Runnable r = new Runnable() {
        @Override
        public void run() {
    
        System.out.println("123");
    
        }
    };
    
    Thread thread = new Thread(r);
    thread.start();    

    第二种:继承Thread类,重写run方法

    class MyThread extends Thread{
    
        @Override
        public void run() {
            for(int i = 0;i<10;i++){
                System.out.println(Thread.currentThread().getName());
            }
        }
    }

    调用的时候

    MyThread myThread = new MyThread();
    myThread.start();

    总结:两种的区别是,没区别,两种都需要new一个Thread的实例,第一种就是传入Runnable实例,当Thread类的run被调用的时候,调用Runnable的run方法。第二种是重写Thread的run方法,意思就是说,不执行父类Thread里面的run方法了,直接执行你重写的run里面的内容,所以结果也是一样。如果当前类已继承了一个父类,不能继承Thread,那么就可以考虑继承Runnable接口。个人认为继承Runnable接口更家灵活。

    2. 线程随机性

    这里就写了一段代码,测试效果,可以看出来,每次执行的结果都是不一样的,证明,线程具有随机与不确定性,Thread的start方法就是告诉CPU,线程准备就绪,等待CPU的调用run方法,所以当CPU空闲的时候,他就会去调用run的方法。所以为什么上面的代码里面调用的是start而不是run,因为调用start最终的结果是由另外一个线程调起run方法,而如果一开始调用run,那就不是在同一个线程当中执行。切记这一点

    public class TestThread {
        public static void main(String[] args) {
    
            MyThread myThread = new MyThread();
            myThread.start();
    
            for(int i = 0;i<10;i++){
                System.out.println(Thread.currentThread().getName());
            }
        }
    
    
    }
    class MyThread extends Thread{
    
        @Override
        public void run() {
            for(int i = 0;i<10;i++){
                System.out.println(Thread.currentThread().getName());
            }
        }
    }

    第一次执行结果:

    第二次执行结果:

    3. 调用start顺序不代表线程启动顺序

    这里写了一段代码测试,循环新建线程并调用start,按顺序应该从0到9,但结果并没有,每一次运行的结果都不一样,而且是无序,代表start的顺序并不代表run被调用的顺序

    public class TestThread {
        public static void main(String[] args) {
    
            for(int i = 0;i<10;i++){
                MyThread myThread = new MyThread(i);
                myThread.start();
    
            }
        }
    
    
    }
    class MyThread extends Thread{
    
        private int ti;
        public MyThread(int ti){
            this.ti = ti;
        }
    
        @Override
        public void run() {
            System.out.println("Thread_" + ti);
        }
    }

    第一次运行结果:

    第二次运行结果:

     

  • 相关阅读:
    【经验总结】- IDEA无法显示Project目录怎么办
    JSON API免费接口(转)
    电子商务(电销)平台中订单模块(Order)数据库设计明细(转)
    typora 快捷键
    table 随td固宽
    跨域请求
    在网址前加神秘字母,让你打开新世界(z)
    vux安装中遇到的坑(转)
    常用正则表达示
    mui 浏览器一样自动缩放
  • 原文地址:https://www.cnblogs.com/oscar1987121/p/10219595.html
Copyright © 2011-2022 走看看