31.黑马程序员-多线程(继承Thread)

来源:互联网 发布:淘宝店买卖平台 编辑:程序博客网 时间:2024/05/20 01:08

------- android培训、java培训、期待与您交流! ----------

   一.概念
  • 1.进程:
    • 正在进行中的程序。
    • 程序中的控制单元、执行路径(每一个进程从头执行到尾就是一个执行路径)。
  • 2.线程
    • 线程的特点:
      • 进程中的一个独立的控制单元
      • 线程空着着进程的执行。
      • 线程是进程中的内容,每一个应用程序至少包含一个线程--主线程。
    • jvm的多线程
      • 至少有一个主线程,一个垃圾回收线程。
    • 常见的多线程程序,如迅雷下载。
  • 3.为什么使用多线程
    • 多个线程“同时”执行,提高效率。
    二.定义
  • 进程、线程是windows创建的,只需要调用系统中的内容就可以创建,JVM提供了这种功能的对象。
  • 创建线程的两种形式:
    • 方法一步骤:
      • 1继承Thread类。
      • 2复写Thread类中的run方法。
      • 3调用线程的start方法,该方法有两个作用:启动线程。调用run方法。
      • 4主线程new一个对象的时候是创建了一个线程对象,需要调用start方法来执行,start方法调用run方法。
      • 问题:为什么要覆盖run方法
        • 因为Thread类用于描述线程,这个类只定义了一个功能run,用于存储线程要运行的代码,run的存在是因为java提供给子类实现自己代码的,类似于main。
      • 例如
      • class Demo extends Thread
      • {
        • public void run()
        • {
          • //代码
        • }
      • }
      •  
      • class ThreadDemo
      • {
        • main函数定义
        • {
          • Demo d = new Demo();//创建好一个线程对象。
          • d.start();//线程启动,start会调用run方法。线程d与主线程交替执行了。如果是d.run,仅仅是对象调用方法,执行完run方法以后才继续执行,而线程虽然创建了却没有执行。
          • //代码
        • }
      • }
    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      class 类名 extends Thread{
      方法1;
      方法2
      public void run(){
      // other code…
      }
      属性1
      属性2
        
      }
    三.线程的使用
  • 1.获取线程对象以及名称
    • 线程都有自己默认的名称:Thread-编号,编号从0开始类推。
    • 线程初始化的时候就要有名称:Thread(String name),但是这里需要用父类的构造方法,因为父类描述完了一个私有的name,并通过set、get方法对它进行访问,我们只要拿来用就行了,所以在线程子类中这样写:super(name);调用Thread的构造函数来自定义名称。
      • 实现方法:子类构造对象时,子类的参数name传给父类构造函数
  • 2.currentThread
    • 定义: static Thread currentThread()   //返回对当前正在执行的线程对象的引用。
    • 作用:
      • 静态的用类名就可以使用,直接使用Thread线程类调用这个方法返回的是正在执行的线程对象的引用,再调用getName() 方法 :获取线程名称等。并且Thread.currentThread()==this。
      • 既然 Thread.currentThread()==this是等价的,那么为什么使用它?因为 Thread.currentThread()获得的线程引用更加严谨、标准、通用,this就没有那么严谨。
  • 3.卖票程序(暂缺)