A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2018-4-27 11:28 编辑

多线程学习笔记

Day 11概念
  • 进程: Process, 一个应用程序在内存中的执行区域
  • 线程: Thread, 进程中的一条执行路径
  • 并发: 并行发生, 同时发生, 多线程就可以实现并发
  • 同步: 注意并不是同时的意思, 同步是指一步接一步的执行, 一个执行完毕再开始执行下一个. 单线程就是同步
  • 异步: 不是一步一步执行, 而是同时执行多步, 每个步骤何时结束不确定. 多线程就是异步
  • 阻塞: 上一行代码正在执行, 还没有执行完毕, 程序就阻塞在这里了, 下一行代码必须等上一行不再阻塞后才能执行

单线程和多线程的特点
  • 单线程: 同一时间只做一件事, 安全性高, 效率低
  • 多线程: 同一时间做多个事情, 安全性低, 效率高

多线程的实现方式
  • 继承Thread类, 重写run方法
  • 实现Runnable接口(仍然是创建Thread类对象), 重写run方法

  • java.lang.Thread类: 实现了Runnable接口

    • 构造方法

      • Thread Thread(): 创建Thead对象
      • Thread Thread(Runnable r): 通过Runnable对象创建Thread对象
      • Thread Thread(Runnable r, String threadName): 通过Runnable对象创建Thread对象并指定线程名

    • 成员方法

      • void start(): 启动线程, 即让线程开始执行run()方法中的代码
      • String getName(): 获取线程的名称
      • void setName(String name): 设置线程名称

    • 静态方法

      • static Thread currentThread(): 返回对当前正在执行的线程对象的引用
      • static void sleep(long millis): 让所在线程睡眠指定的毫秒



多线程中的常见问题
资源共享: 卖票问题
  • 共享资源定义位置: 共享资源要定义在多个线程能够共同使用的地方, 如:

    • 多个Thread共用同一个Runnable实现类对象, 则定义为Runnable实现类的非静态成员变量
    • 如果只用Thread子类, 则可以定义为Thread子类的静态成员变量

  • 操作共享数据的线程安全问题: 使用同步解决

    • 同步代码块

      • synchronized (锁对象) {}
      • 锁对象

        • 必须是多个线程共享的对象:

          • 一个类的Class对象
          • 如果是实现Runnable, 则可以是this



    • 同步方法

      • public (static) synchronized void method() {}
      • 锁对象

        • 静态同步方法, 锁对象是: 方法所在类的Class对象
        • 非静态同步方法, 锁对象是: this




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马