进程:运行一个程序就开启了一个进程,是系统调度和资源分配的基本单位。
线程:是系统进行运算调度的最小单位,它包含在进程之中,是进程实际运算单位。一个进程中可以开启多个线程。
管程:在数据结构叫做monitor,在Java中叫做锁,进入方法的时候获取monitor对象(锁),退出的时候释放。
用户线程:我们日常使用,或者造出一个线程执行一些操作,都属于用户线程(如果主线程结束了,用户线程没结束,jvm还存在)
守护线程:垃圾回收器执行过程中的行为,就是让守护线程去执行的。(如果主线程里只有守护线程,主线程结束,jvm也结束)
可运行态(Runnable):这里是调用线程的执行方法,里面有两种状态一种是就绪态,一种是运行态,就绪态获取到CPU时间片就到达运行态,运行态失去CPU时间片或者用Thread.yield()就会从运行态回到就绪态。
阻塞态(Blocked):获取synchronized锁或者Lock锁拿不到就阻塞态
等待态(Waiting):这种就是无限期等待使用wait、join,必须有人唤醒notify/notifyAll(针对wait),或者运行结束唤醒。
含等待时间等待态(Timed Waiting):join(time)、wait(time)、sleep(time),要么等超时自动结束。
终止态(Terminated):线程完成,或者异常已经结束。
2.1 wait和sleep区别
wait和sleep都能被interrupt中断,wait是object类的方法,任何对象都能调用,sleep是Thread静态类里的方法,wait使用的时候一般在synchronized里,如果使用了会释放锁,别人可以获取释放的锁,sleep不会占用锁,也不会释放锁,在哪里都可用。
3.1串行并行
串行:任务一个完成以后再完成下一个任务 one by one。
并行:多个任务同时执行。
3.2并发 并行
并行:同一时刻,多个线程执行独立不同的任务,互相不抢夺资源。
并发:同时有多个任务执行同一任务,这一任务可能会造成资源抢占的问题,像单核CPU执行多个任务时候,就是通过时间片轮转模拟出来,同一时间处理多个任务。
到此这篇juc阻塞队列(阻塞队列api)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/hd-api/40862.html