zoukankan      html  css  js  c++  java
  • java基础知识回顾之java Thread类--java线程实现常见的两种方式(一)

    创建线程的第一种方式:
           / * 步骤:
             *     1.继承Thread类
             *     2. 重写Thread的run方法
             *         目的:将自定义的代码存储在run方法中,运行自定义线程
             *         start 1.启动线程,2调用run方法
             * 为什么要覆盖run方法?
         *       Thread类用于描述线程,该类定义了一个功能,用于存储线程要运行的代码,该存储功能就是run方法
         * 也就是说Thread中的run方法,用于存储线程要运行的代码。
         * 主线程要运行的方法存放在main里面,这是虚拟机定义的
         * 虚拟机开启主线程,也就是运行main方法里面的代码:
         *
        
         *
         */

    代码演示:

         *发现运行结果每一次都不同,因为多个线程都在获取CPU的使用权,cpu执行到谁,谁就运行,明确
         * 一点,cpu在某一个时刻,只能运行一个程序(多核除外),CPU在做快速的切换,达到看上去是同时运行的
         * 多线程的运行行为在互相的抢夺CPU的执行权。
         * 这是多线程的一个特性:随机性

     

    public class HelloThread extends Thread {
        private String name;
        public HelloThread(String name){
            this.name=name;
        }
        public void run(){
            for(int i=0;i<=60;i++){
                System.out.println(name+"运行"+i);
            }
        }
    
        public static void main(String[]args){
            HelloThread h1 = new HelloThread("A副线程");//创建一个线程
            //HelloThread h2 = new HelloThread("B");
            //两个线程并发的运行
            h1.start();//开启线程,并执行该线程的run方法
            //h1.run();//仅仅是对象调用方法,是主线程的顺序执行
            for(int i=0;i<60;i++){
                System.out.println("主线程执行中。。。。。。。。。。"+i);
            }
            //h2.start();
        }
    }

    总结:通过代码的测试:说明开启线程是使用start方法,虚拟机会自动调用run方法,等到抢到CUP使用权,线程从就绪状态转为运行状态,而不能直接调用run()方法,因为在main方法里面如果调用run方法,相当于jvm主线程执行了一个普通的方法。所以是不能实现多线程,只是主线程在顺序的往下执行。

     
  • 相关阅读:
    iOS应用程序间共享数据(转)
    解决右滑返回手势和UIScrollView中的手势冲突(转)
    (转)iOS被开发者遗忘在角落的NSException-其实它很强大
    iOS 身份证最后一位是X,输入17位后自动补全X(转)
    springboot单机秒杀之queue队列
    springboot单机秒杀-aop+锁
    springbot单机秒杀,锁与事务之间的大坑
    spring-cloud学习之4.微服务请求打通
    spring-cloud学习之3.使用feign实现负载均衡
    spring-cloud学习之2.搭建请求网关spring-cloud-getway
  • 原文地址:https://www.cnblogs.com/200911/p/3893782.html
Copyright © 2011-2022 走看看