左耳听风 第三十五周
每周完成一个ARTS: 每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tip、Share 简称ARTS)
Algorithm
继续按顺序来完成「LeetCode」前 200 题
review
Java: Multithreading — Part 1 「Java :多线程 —— 第一部分」
操作系统控制多个应用程序 —— 进程
一个应用程序里的多个功能 —— 线程
并发:同一时间段执行多个任务
并行:同一时刻执行多个任务
线程、进程出现的原因:有效的利用计算机资源,并发执行多个任务。
单线程与多线程的对比:
- 单线程:复杂性低(程序运行不容易出错),资源利用率低。
- 多线程:复杂性高(程序运行容易出错),资源利用率高。
栈:用来存储私有变量(局部变量、方法参数),使用完栈帧立即释放该部分内存。不可共享。
堆:存储类对象代码,共享资源,可以被 多个线程读写。只有在对象被垃圾回收器回收时才会释放该部分内存。
而每一个线程都有自己独立的栈,存储自己的私有变量,对于存储在堆中的对象(共享资源)访问时可能会修改其状态(例如类对象的成员变量值),所以 Java 中引入了锁机制帮我们确保程序执行的「原子性」、「一致性」。
<