做网站 什么主题较好,浙江建设继续教育网站首页,企业网站建设及推广研究,南宁营销型网站建设公司哪家好文章目录 1. 线程1.1 线程的使用线程运行原理 1. 线程
1.1 线程的使用
方法一#xff0c;直接使用 Thread#xff1a; 方法二#xff0c;使用 Runnable 配合 Thread#xff1a;
把【线程】和【任务】#xff08;要执行的代码#xff09;分开
Thread 代表线程Runnabl… 文章目录 1. 线程1.1 线程的使用线程运行原理 1. 线程
1.1 线程的使用
方法一直接使用 Thread 方法二使用 Runnable 配合 Thread
把【线程】和【任务】要执行的代码分开
Thread 代表线程Runnable 可运行的任务线程要执行的代码 Thread 与 Runnable 的关系
方法1 是把线程和任务合并在了一起方法2 是把线程和任务分开了用 Runnable 更容易与线程池等高级 API 配合用 Runnable 让任务类脱离了 Thread 继承体系更灵活聚合优于继承
方法三FutureTask 配合 Thread
FutureTask 能够接收 Callable 类型的参数用来处理有返回结果的情况
FutureTask是Future和Runable的实现
这里的lambda表达式是对FutureTask的参数,它的参数是callable类型的 Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果。必要时可以通过get方法获取执行结果该方法会阻塞直到任务返回结果。
线程运行原理
栈与栈帧 我们都知道 JVM 中由堆、栈、方法区所组成其中栈内存给线程用每个线程启动后虚拟机就会为其分配一块栈内存。
每个栈由多个栈帧Frame组成对应着每次方法调用时所占用的内存每个线程只能有一个活动栈帧对应着当前正在执行的那个方法
线程上下文切换Thread Context Switch 因为以下一些原因导致 cpu 不再执行当前的线程转而执行另一个线程的代码
线程的 cpu 时间片用完垃圾回收有更高优先级的线程需要运行线程自己调用了 sleep、yield、wait、join、park、synchronized、lock 等方法
当 Context Switch 发生时需要由操作系统保存当前线程的状态并恢复另一个线程的状态Java 中对应的概念就是程序计数器Program Counter Register它的作用是记住下一条 jvm 指令的执行地址是线程私有的
状态包括程序计数器、虚拟机栈中每个栈帧的信息如局部变量、操作数栈、返回地址等Context Switch 频繁发生会影响性能