多线程
文章平均质量分 72
puppyhood
这个作者很懒,什么都没留下…
展开
-
synchronized的实现原理
synchronized在底层是如何实现加锁的呢? 使用monitorenter和monitorexit指令实现的 //count进行累加 public void incCount(){ synchronized (this){ count = count + 1;//count++; } } synchronized关键字包围的同步块,查看.class public void incCount(); descriptor原创 2021-01-29 20:30:26 · 120 阅读 · 3 评论 -
线程池原理
1.使用线程池的好处(为什么使用线程池) 1.减少资源消耗 Thread线程,是操作系统的资源,创建和销毁是要有资源消耗的,如果有线程池事先准备好一批线程,创建线程和销毁线程的资源就没有了 2.使用线程池缩短任务的执行时间。 有一个新的任务就new 一个线程,那么时间消耗为:New Thread() T1:线程的创建时间,T2:任务的执行时间 ,T3:线程的销毁时间 准备好一堆的线程准备好 就不需要T1 T3 3.线程是稀缺而昂贵的资源,因为线程创建出来消耗CPU,消耗内存(一定消耗内存),线程执行太多,原创 2021-01-28 21:21:08 · 623 阅读 · 1 评论 -
CAS基本原理
CAS(Compare And Swap) Atomic开头的类都被称为原子变量类 原子操作:不可再分的操作,这个操作要么全部完成,要么全不完成。 synchronized关键字包围的代码块就是一个原子操作 synchronized可以实现原子操作,但这个机制太重 CAS的原理 利用了现代处理器都支持的CAS的指令, 循环这个指令,直到成功为止 悲观锁和乐观锁: Synchronized 是悲观锁 ,抢到锁后安安心心的做。 CAS 是乐观锁,先取出来再去改 ,用CAS指令去比较和交换(比较没人改过就交换,原创 2021-01-27 15:36:00 · 146 阅读 · 1 评论 -
线程与进程理论知识入门05-(新启线程,线程的生命周期,死锁,ThreadLocal)
新启线程- 只有两种 之前认为有3种 派生自Thread 这个类 实现一个Runnable接口,把接口实例化后交给一个线程去执行 实现一个Callable接口,把接口实例化后交给一个线程去执行 新启线程- 只有两种方式 Callable这一种严格意义上讲不能算是 Thread源码: 1. There are two ways to create a new thread of execution. One is to 2. declare a class to be a subclass of &l原创 2021-01-27 10:37:09 · 171 阅读 · 1 评论 -
线程与进程理论知识入门04-等待唤醒机制(wait与notify)与ThreadLocal
锁.wait() 与 锁.notify() wait 或者 notify 必须要有锁包裹着 等待区域: wait(); 获取对象的锁???? synchronized(持有的锁 对象的锁){ //因为被锁住了,你没法获取this锁 wait(); //内部会释放this锁,这样通知区域才能拿到锁 } 通知区域: notify(); 获取对象的锁???? synchronized(持有的锁 对象的锁){  原创 2021-01-26 13:17:23 · 183 阅读 · 1 评论 -
线程与进程理论知识入门03(类锁,对象锁,显示锁)
synchronized(隐士锁,内置锁) synchronized 隐士锁(内置锁)(锁定 解锁 看不到)(被JDK封装到内部里面去 原理调用native层跟操作系统交互 完成…) /** * synchronized 隐士锁(内置锁)(锁定 解锁 看不到)(被JDK封装到内部里面去 原理调用native层跟操作系统交互 完成....) */ public class GpsEngine { private static GpsEngine gpsEngine; //单例 p原创 2021-01-26 07:35:24 · 119 阅读 · 2 评论 -
线程与进程理论知识入门02
运行状态到死亡中的stop()方法过时了。 setDeamon()守护线程: public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(){ @Override public void run() { for(int i = 0; i<50; i++){ .原创 2021-01-25 10:11:33 · 83 阅读 · 1 评论 -
线程与进程理论知识入门01
1.App线程概念 main_thread: 主线程专门用来处理用户的操作(处理UI)。 work_thread: 做下载等工作。 2.CPU核心数和线程数的关系 核心数、线程数: 目前主流 CPU 都是多核的。增加核心数目就是为了增加线程数,因为操作系统是通过线程来执行任务的,一般情况下它们是 1:1 对应关系,也 就是说四核 CPU 一般拥有四个线程。但Intel 引入超线程技术后,使核心数与线程 数形成 1:2 的关系 3.CPU时间片轮转机制 进程是程序运行资源分配的最小单位: 进程是操作系统进行资原创 2021-01-24 18:24:05 · 156 阅读 · 1 评论