线程的学习笔记

进程与线程的区别

进程是指正在运行的程序,是程序的一次执行过程,它对应了从代码加载,执行并执行完毕的一个完整的过程,整个过程也是进程本身从产生,发展到消亡的过程。

  1. 进程是系统运行的基本单位
  2. 每一个进程都有自己独立的空间,一组系统资源
  3. 每一个进程内部数据和状态时完全独立的
  4. 每一个应用程序运行时都会产生一个进程

线程是进程中执行运算的最小单位,一个进程在其执行过程中可以产生多个线程,而线程必须在某个进程内执行,线程是进程内部的一个执行单元,是可以完成一个独立任务的顺序控制流程

创建线程的方法

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口
  4. 线程池

线程的状态

  1. NEW :尚未启动的线程处于此状态
  2. RUNNABLE:在Java虚拟机中执行的线程处于此状态
  3. BLOCKED:被阻塞等待监视器锁定的线程处于此状态
  4. WAITING:正在等待另一个线程执行特定动作额线程处于此状态
  5. TIME_WAITING:正在等待另一个线程执行动作到达等待时间的线程处于此状态
  6. TERMINATED:已经退出的线程处于此状态

image-20230406204508415
在这里插入图片描述

wait()方法与sleep()方法的比较

  1. wait()方法是Object类中的一个本地方法,sleep()是Thread 的一个静态的方法
  2. 目的不同:sleep 方法是用于让线程暂停指定的时间,它不会对其他线程产生任何影响。而 wait 方法是用于让线程等待其他线程的通知,当某个条件得到满足时,它会收到通知并继续执行。
  3. 执行位置不同:sleep 方法可以在任何地方调用,无论是在同步代码块中还是在非同步代码块中。而 wait 方法必须在同步代码块或同步方法中调用,因为它需要在共享的同步对象上等待通知。
  4. 释放资源不同:当线程调用 sleep 方法后,它不会释放对象锁,所以其他线程不能访问该对象。而当线程调用 wait 方法后,它会释放对象锁,这样其他线程就可以访问该对象。
  5. 通知方式不同:sleep 方法不需要其他线程的通知,它只是简单地睡眠一段时间。而 wait 方法需要其他线程的通知,当某个条件得到满足时,其他线程必须调用 notify或者notifyAll

【注意】

共享的同步对象上等待通知是指在多个线程之间共享同一个对象的情况下,一个线程在该对象上等待另一个线程发送的通知。

在 Java 中,可以通过使用 synchronized 关键字对对象加锁来实现线程同步。当一个线程获得对象锁时,其他线程将不能对该对象进行操作,直到该线程释放锁。

如果一个线程在共享的同步对象上等待通知,它可以通过调用 wait 方法放弃对象锁,并进入等待状态。当另一个线程调用 notify 或 notifyAll 方法时,等待的线程将被唤醒,并继续执行。

通过在共享的同步对象上等待通知,可以实现多个线程之间的协作和通信,控制线程的执行顺序和时间。但是,使用 wait 方法需要谨慎,以避免线程死锁和其他问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值