A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Fatev 初级黑马   /  2019-4-3 18:39  /  624 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1. 线程和进程
   1.  线程:就是最小的执行单元,就是一个方法
   2.  进程:程序加载进入到内存后,形成程序 就叫进程

   2.并发和并行

​           1.并发:同一时间端,执行程序,快速切换

           2.并行: 同一时刻,同时执行

​    3.创建线程的两种方式

​            1.extends Thread (略)

​            2.implements Runnable

​                   3.callAble (实现的第三种方式)

​    4.多线程执行的调度

​            1. 平均分配 (每个人平均分一个执行时间)

​            2.抢占式分配:大家来抢夺资源

​     5.多线程执行的内存图

​                每次打开线程就开启一个新的栈空间

​                栈空间中的方法,就是栈帧--> 包含着所有方法所需要的数据

     6. 多线程的随机性       

        ​         1.java采用的是抢占式资源,到底执行哪个线程,其实是依赖于cpu 去分配执行的资源,cpu分配到了谁,这事是随机,所以执行的效果也是随机的

  7.多线程的安全问题  

​                1.当多个线程在操作同一个共享数据时,就有可能会发生线程安全问题

​                 解决多线程安全问题的方案:       

​                                 1. syn 同步代码块:比同步方法更加的灵活,隐式锁(看不到拿锁还锁等过程)

​                                 2. syn同步方法

​                                                 非静态方法(this)

​                                                  静态方法锁:(类的class文件 反射)

                                 3.lock

​                                 4.atomic
​                                       

8. 线程池

   ​           1. 为什么要使用线程池

   ​                         线程的频繁创建和销毁是非常消耗性能的,为了不让他频繁的创建和销毁,我们就想到了使用线程池--> 在底层搞一个集合,将线程放置到线程池中,要使用时,将其取出,用完之后放回到对应的集合中

   ​        2. 线程池的使用步骤

   ​                        1.创建线程池

   ​                                 ExecutorService es = Executors.newFixedThreadPool(int 参数)

   ​                                  参数:是创建这个线程池的线程数量

   ​                        2. es.submit(任务) ,用线程池中的线程去执行对应的任务​               

   ​                                注意:这个任务必须是Runable 的子类



   9  引用计数算法(jdk1.2就被淘汰)

​                 1.底层设置了一个计数器,当引用去指向这个对象时,计数器+1,反之-1 ,最后判断这个计数器是否大于0 ,就知道是否有引用去指向它

​                 淘汰的原因是因为无法解决循环引用问题

​                  解决方案是可达性算法

​                   1.选取一个对象作为GC ROOTS 顶点,其他对象去指向这个gc roots 顶点,如果能指到顶点,说明这个对象不是一个垃圾,反之是               

​                        class 文件-->(类加载器 父类双亲委派机制)         RuntimeDataArea

​                         1.栈  2.堆   3.方法区(元空间)  4.pc 寄存器  5.本地方法栈

​                                       

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马