首页 > 其他分享 >线程

线程

时间:2023-05-28 10:34:28浏览次数:24  
标签:join 阻塞 线程 执行 唤醒 CPU

并发,并行,串行的区别

  • 并发:指的同一个时间间隔内发生,交替执行
  • 并行:两个任务同一时刻同时执行,互不干扰
  • 串行:一个任务接着一个任务执行,只能等前一个执行完毕,下一个才能执行

并发的三大特性

  • 原子性: 操作过程中,要么所有操作都执行,要么都不执行
  • 可见性: 一个线程对于共享变量值的修改,能够及时的被其他线程看到
  • 有序性: 程序执行的顺序按照代码的先后顺序执行

线程的生命周期

  • 五种状态:

    1.创建

    2.就绪(等待使用CPU)

    3.运行(执行start方法,获取到CPU使用权)

    4.阻塞(放弃了CPU使用权,只有线程进入就绪态才能再次运行)

    • 等待阻塞: 线程执行wait方法,该线程会释放占用的所有资源,不能自动唤醒,只能依靠其他线程调用notify或notifyAll唤醒.

      notify: 唤醒正在等待这个对象的单个线程。如果有任何线程正在等待此对象,则选择其中一个线程进行唤醒。选择是任意的,由实现自行决定。

      notfiyAll: 唤醒等待这个对象的所有线程

    • 同步阻塞

      运行的线程获取对象的同步锁,若该同步锁,被其他线程占用,则JVM会把该线程放入到锁池中

    • 其他阻塞: 线程执行sleep方法或join方法,或者发出了IO请求,JVM将该线程置为阻塞态

    5.死亡

  • Java中有6种线程状态

    NEW:新创建的线程

    WAITING:就绪态

    RUNNABLE:运行态

    BLOCKED:阻塞态

    TIMED WAITING:线程处于定时等待状态

    TERMINATED:已退出的线程

sleep,wait,yield,join

  • sleep: 释放占用的资源,进入阻塞态
  • wait: 释放占用的资源,进入阻塞态,不能自主唤醒,依靠其他线程通过noti fy或notifyAll唤醒
  • yield: 执行后线程进入就绪状态, 马上释放cpu的使用权,但是保留了CPU的使用资格
  • join: 执行后线程进入阻塞态,在B调用A的join, B会进入阻塞态,一直等待A执行完毕

标签:join,阻塞,线程,执行,唤醒,CPU
From: https://www.cnblogs.com/huanghongtao/p/17437864.html

相关文章

  • python3多线程
    1、线程和进程计算机资源,指的是cpu计算资源、内存资源、接口读写资源等。进程:计算机中用于分配资源的最小个体。不同进程之间并不共享内存。线程:是进程内部的资源分配对象,一个进程最少会有一个线程。同一进程下的不同线程可以共享内存。2、并行和并发并行:同一时间段,交替前行。并......
  • java面试 (12)- Valiolate原理?是线程安全的吗?
    1:导致线程问题的原因:抢占式执行多个线程同时修改了同一个变量非原子性操作内存可见性问题指令重排问题2:并发编程三大特性可见性原子性有序性3:volatile关键字3.1volatile解决了内存可见性和指令重排序的问题写volatile变......
  • wait,notify,notifyAll,sleep,join等线程方法的全方位演练
    一、概念解释1.进入阻塞:有时我们想让一个线程或多个线程暂时去休息一下,可以使用wait(),使线程进入到阻塞状态,等到后面用到它时,再使用notify()、notifyAll()唤醒它,线程被唤醒后,会等待CPU调度。不过需要注意的是:在执行wait()方法前必须先拿到这个对象的monitor锁。2.线程......
  • 线程的 6 个状态(生命周期)
    线程的6个状态(生命周期)1.线程的一生中有哪几个状态有6种状态,分别如下:NewRunnableBlockedWaitingTimed_WaitingTerminated2.每个状态的含义是什么New:是在newThread()之后,执行start()方法之前的一个状态;Runnable:是在线程调用start()方法之后的状态(其实包括......
  • 操作系统(2.8)--线程的实现
    线程的实现方式1.内核支持线程(KST)内核支持线程,与进程相同,是在内核的支持下运行的,即无论是用户进程中的线程,还是系统进程中的线程,他们的创建、撤消和切换等也是依靠内核,在内核空间实现的。这种线程实现方式主要有如下四个优点:(1)在多处理器系统中,内核能够同时调度同一进程中多个线......
  • jmeter线程组之间数据共享
    jmeter添加环境变量,可使跨线程组访问该属性值,实现了数据共享使用函数setProperties实现思路:先创建两个线程组,第一个线程组设置环境变量,第二个线程组获取环境变量的值(1)第一个线程组:设置随机生成四位数字后,在将值赋值给环境变量将设置的变量${param}引用到环境变量,在添加......
  • x86游戏逆向之实战游戏线程发包与普通发包的逆向
    网游找Call的过程中难免会遇到不方便通过数据来找的或者仅仅查找数据根本找不到的东西,但是网游中一般的工程肯定要发给服务器,比如你打怪,如果都是在本地处理的话就特别容易产生变态功能,而且不方便与其他玩家通信,所以找到了游戏发包的地方,再找功能就易如反掌了。 在游戏逆向过程......
  • C++多线程
    多线程:thread_local每个线程都会有自己的一份数据,不会共享数据,避免竞争 volatile告诉编译器每次取数据都要从内存里取 使用情况:信号处理内存映射相关非本地跳转 std::atomic定义操作为原子操作,不可被线程分开 接口  std::shreadC++的线程类,但是不保证......
  • Thread Exercises C语言线程
    1/4Assignment4:ThreadsDue11Junby23:59Points10Availableuntil15Junat23:59Assignment4-ThreadExercisesDuedate11:59pm-SundayWeek13.Thisassignmentisdesignedtotestyourunderstandingofthreads,mutexesandsignalling.Download......
  • 8、Hystrix 线程池隔离与接口限流
    线程池隔离技术的设计原则Hystrix采取了bulkhead舱壁隔离技术,来将外部依赖进行资源隔离,进而避免任何外部依赖的故障导致本服务崩溃线程池隔离,学术名称:bulkhead,舱壁隔离外部依赖的调用在单独的线程中执行,这样就能跟调用线程隔离开来,避免外部依赖调用timeout耗时过长,导致调用线程......