并发编程
文章平均质量分 69
从基础开始Java并发编程
你男朋友
我喜欢的那匹驹身上,有锦,润而不耀,与龙同尘
展开
-
守护线程和用户线程
上一篇:线程死锁守护线程和用户线程概述:Java中的线程分为两类【daemon】守护线程和【user】用户线程;在JVM启动时会调用main函数,main函数所在的线程就是一个用户线程,其实在JVM内部还同时启动了很多守护线程,比如垃圾回收线程。区别:当最后一个用户线程结束时JVM正常退出,不论是否有守护线程在执行,即守护线程是否结束不和程序的结束与否无关;而当用户线程没有执行完JVM则不会退出;换句话说JVM是否退出只与用户线程有关代码示例:package com.dwk.thread;原创 2021-10-15 22:20:18 · 122 阅读 · 0 评论 -
线程死锁.
上一篇:线程中断线程死锁定义:死锁指的是两个及两个以上的线程在执行中,因争夺资源而造成的互相等待的现象,在无外力的作用下这些线程会一直等待而无法继续执行。死锁产生条件:1、互斥条件:对象被一个线程占用,那么其他线程要等这个线程用完才能去占用;2、请求并持有条件:一个线程占用了一个资源,执行过程中还去请求其他的资源;3、不可剥夺条件:一个对象一旦被某个线程占用,必须要等到这个线程释放这个对象的锁,其他线程才可以去竞争;4、环路等待条件:发生死锁时,必然存在“线程-资源”环形链,就是说必定线程原创 2021-10-15 21:27:56 · 85 阅读 · 0 评论 -
线程中断.
上一篇:yield()–让出CPU执行权线程中断线程中断是一种线程中的协作模式,通过设置线程的中断标志并不能直接终止线程的执行,而是被中断的线程根据中断状态自行处理。中断线程方法:interrupt() 仅仅是给调用这个方法的线程设置一个中断标志,实际上并没有立即被中断,调用这个方法的线程还会继续往下执行;如果A线程调用了wait、sleep、join等方法阻塞了自己,B线程在A阻塞期间调用了A的interrupt()方法,这个时候A会抛出Interr原创 2021-10-03 20:45:29 · 179 阅读 · 0 评论 -
yield()--让出CPU执行权
上一篇:sleep()–线程休眠yield()–让出cpu执行权yield()是Thread类下的一个静态方法从注释中可以知道 这个方法一般用于测试和调试《JAVA并发编程之美》书中是这么描述的:“当一个线程调用yeild()方法时,实际就是在暗示线程调度器当前线程请求让出自己的cpu使用,但是线程调度器可以无条件忽略这个暗示。操作系统是为每一个线程分配一个时间片来占有cpu,正常情况下当一个线程把时间片使用完之后线程调度器才会进行下一轮的线程调度,而当一个线程调用了yield()时,是在告诉原创 2021-10-03 18:22:42 · 368 阅读 · 0 评论 -
sleep()--线程休眠
上一篇:join()—等待线程执行终止sleep()是Thread类下的一个静态方法另外一个sleep(long time,int nanos)也是静态的,,最终还是调用了sleep()方法当一个执行中的线程调用了Thread的sleep()方法后,调用线程会暂时让出指定时间的执行权,也就是在这期间,该线程不参与cpu的调度 但是该线程所拥有的监视器资源比如锁,不会让出,也就是线程在sleep()期间,一直占有锁,不会释放。在sleep()时间到了之后,线程正常返回,处于就绪状态然后参与cpu原创 2021-09-26 12:41:08 · 242 阅读 · 0 评论 -
join()--等待线程执行终止
所属类: Thread作用:保证当前线程执行完毕再执行下一个线程,类似同步场景:在一个任务结束之后才可以进行下一个任务,例如,文件需要先保存成功才让其他线程操作,不能在文件保存过程中就让其他线程去进行操作...原创 2021-09-24 12:29:42 · 249 阅读 · 0 评论 -
wait()--阻塞线程
上一节:进程、线程一张图wait()方法是Object类下的一个方法调用wait()方法的时候,此时占用这个对象的线程会释放这个对象的锁,并进入这个对象的等待队列,等到其他线程调用了这个对象的notify()或者notifyAll()方法的时候,该线程会被唤醒并对这个对象的锁进行竞争,如果竞争到了这个锁的话就继续从wait()的地方执行,如果没有竞争到锁的话那么继续等待这个对象的锁被释放再次进行竞争;现在有对象O,线程A,线程B在某一时刻线程A获取到了对象O的监视器锁,开始执行分配给线程A的逻辑,线原创 2021-09-14 21:09:51 · 1796 阅读 · 0 评论 -
进程、线程一张图
另外说明一下,线程上下文切换:理解线程上下文切换内容:在多线程编程中,线程的数量一般都大于cpu个数,而每个cpu在同一时刻只能被一个线程使用,为了让用户感觉多个线程时在同时执行,cpu资源的分配采用了时间片轮转的策略,也就是给每个线程分配一个时间片,线程在时间片内占用cpu执行任务。当前线程的时间片使用完之后,就会处于就绪状态并让出cpu让其他线程占用,这就是上下文切换,从当前线程的上下文切换到其他线程,为了保证线程在下次轮转时知道自己上一次执行到了哪里,在切换线程上下文的时候需要保存当前线程的执行.原创 2021-09-02 12:20:24 · 651 阅读 · 0 评论