• 多线程(创建线程的方法)


    进程:程序(任务)执行的过程

    进程持有资源(共享文件,共享文件)和线程(控制单元)


    java中实现多线程的两种方法:继承Thread类、实现Runable

    实现方式和继承方式有什么区别呢?
        实现方式好处:避免了单继承的局限性。
        在定义线程时建议使用实现方式
    两种方式区别:
        继承Thread:线程代码存放在Thread子类的run方法中。
        实现Runnable:线程代码存在接口的子类的run方法中。


    继承Thread类,代码大致框架:

      一、定义类继承Thread。

      二、重写Thread类中的run方法。
             目的:将自定义的代码存储在run方法中,让线程运行。

      三、调用线程的start方法。
                该方法有两个作用:启动线程,调用run方法。

    import java.lang.*;
    //创建Thread类的子类
    class ThreadDemo extends Thread
    {
        //覆写run方法,将要运行的代码放入run方法中去
        public void run()
        {
            System.out.println("线程中要运行的代码放入到run方法中去");
        }   
    }
    
    class userMain
    {
        public static void main(String [] args)
        {
            //创建Thread类的子类对象
            ThreadDemo threaddemo = new ThreadDemo();
            //调用Thread类子类对象的start方法开启线程
            threaddemo.start();
        }
    }
    View Code

    发现运行结果每一次都不同。
      因为多个线程都需获取cpu的执行权。cpu执行到谁,谁就运行。
      明确一点,在某一时刻,只能有一个程序运行。(多核除外)
      cpu在做着快速的切换,以达到看上去是同时运行的效果。
      我们可以形象把多线程的运行形容为在互相抢夺CPU的执行权。
      这就是多线程的一个特性:随机性。谁抢到谁执行,至于执行多长,cpu说的算。
    为什么要覆盖run方法?
      Thread类用于描述线程。
      该类定义了一个功能,用于存储线程要运行的代码。该存储功能就是run方法。
      也就是说Thread类中的run方法,用于存储线程要运行的代码。


    实现Runnable接口:

      一、创建类实现Runnable接口

      二、覆写Runnable接口子类的run方法

      三、创建Thread对象,将Runnable接口的子类作为参数传递过去

      四、调用Thread类对象的start方法开启线程。

    import java.lang.*;
    //创建Runnable接口的子类
    class RunnableDemo implements Runnable
    {
       public void run()
       {
          System.out.printn("将要用多线程实现的代码放入run方法中");   
       }      
    }
    //main方法中使用
    class userMain
    {
       public static void main(String [] args)
       {
           //创建Runnable子类的对象     
           RunnableDemo runnabledemo = new RunnableDemo();
           //创建Thread类,将Runnable接口的子类作为参数传递进去
           Thread thread = new Thread(runnabledemo);
           //使用线程
           thread.start();
       }   
    }
    View Code

    为什么要将Runnable接口的子类对象传递给Thread的构造函数?
        因为,自定义的run方法所属的对象是Runnable接口的子类对象。
        所以要让线程去执行指定对象的run方法,就必须明确该run方法所属对象    
        5.调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。

  • 相关阅读:
    LeetCode 560 和为 K 的子数组
    idea使用技巧汇总
    【Kafka核心技术与实战】导读
    如何永久关闭 Mybase8 登录弹窗(license提醒)
    分析Edk2启动流程
    OEE计算
    线段树分治学习笔记
    linux 安装PostgreSql 12[转]
    Linux中redis数据备份和迁移【转】
    DataGrid控件自动显示行号
  • 原文地址:https://www.cnblogs.com/gzc911/p/4901455.html
Copyright © 2020-2023  润新知