Java多线程

多线程

  1. 程序:是为完成特定任务、用某种语言编写的一组指令的集合。即指一 段静态的代码,静态对象。

  2. 进程(process):是程序的一次执行过程,或是正在运行的一个程序。是一个动态 的过程:有它自身的产生、存在和消亡的过程。——生命周期

    1. 进程作为资源分配的单位
  3. 线程(thread):进程可进一步细化为线程,是一个程序内部的一条执行路径。线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开 销小

  4. Thread类

    1. 构造器

      1. Thread():创建新的Thread对象
      2. Thread(String threadname):创建线程并指定线程实例名
      3. Thread(Runnable target):指定创建线程的目标对象,它实现了Runnable接 口中的run方法
      4. Thread(Runnable target, String name):创建新的Thread对象
    2. 创建多线程

      1. 方式一:继承Thread类

        1) 定义子类继承Thread类。

        1. 子类中重写Thread类中的run方法。

        2. 创建Thread子类对象,即创建了线程对象。

        3. 调用线程对象start方法:启动线程,调用run方法。

      2. 方式二:实现Runnable接口

        1) 定义子类,实现Runnable接口。

        1. 子类中重写Runnable接口中的run方法。

        2. 通过Thread类含参构造器创建线程对象。

        3. 将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。

        4. 调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。

    3. 多线程的方法

      1. void start(): 启动线程,并执行对象的run()方法

      2. run(): 线程在被调度时执行的操作

      3. String getName(): 返回线程的名称

      4. void setName(String name):设置该线程名称

      5. static Thread currentThread(): 返回当前线程。在Thread子类中就 是this,通常用于主线程和Runnable实现类

      6. static void yield():线程让步

        • 暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程

        • 若队列中没有同优先级的线程,忽略此方法

      7. join() :当某个程序执行流中调用其他线程的 join() 方法时,调用线程将 被阻塞,直到 join() 方法加入的 join 线程执行完为止

      8. static void sleep(long millis):(指定时间:毫秒)

      9. stop(): 强制线程生命期结束,不推荐使用

      10. boolean isAlive():返回boolean,判断线程是否还活着

  5. 线程的生命周期

  6. 线程的同步:Synchronized

    1. Java对于多线程的安全问题提供了专业的解决方式:同步机制

    2. 同步代码块:
      synchronized (对象){
      // 需要被同步的代码;
      }
      
    3. synchronized还可以放在方法声明中,表示整个方法为同步方法。
      例如:
      public synchronized void show (String name){
      ….
      }
      
  7. 线程的通信

    • wait() 与 notify() 和 notifyAll()
      • wait():令当前线程挂起并放弃CPU、同步资源并等待,使别的线程可访问并修改共享资源,而当 前线程排队等候其他线程调用notify()或notifyAll()方法唤醒,唤醒后等待重新获得对监视器的所有 权后才能继续执行。
      • notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待
      • notifyAll ():唤醒正在排队等待资源的所有线程结束等待.

续执行。

  • notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待
  • notifyAll ():唤醒正在排队等待资源的所有线程结束等待.
上一篇:JavaSE 线程知识点学习整理


下一篇:终于有大牛把Java线程知识点讲清楚了!(建议收藏)