黑马程序员技术交流社区

标题: 学习Java [打印本页]

作者: 涛之彝    时间: 2019-5-31 19:38
标题: 学习Java
​    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
​                                          保证了原子性
​                                          这哥们速度超级快,采用乐观锁的思路 (让你去做这件事,但是呢,不能保证你能做成功,如果失败了呢,那你就再做一次),同时还是拽着cpu 去做乐观锁这事  cas
​                                 了解:syn 在jdk1.7 后,对其性能进行了大面积的增强,强到几乎可以在某些特定的情况下可以和lock 抗衡                                
   9  引用计数算法(jdk1.2就被淘汰)
​                 1.底层设置了一个计数器,当引用去指向这个对象时,计数器+1,反之-1 ,最后判断这个计数器是否大于0 ,就知道是否有引用去指向它
​                 淘汰的原因是因为无法解决循环引用问题
​                  解决方案是可达性算法
​                   1.选取一个对象作为GC ROOTS 顶点,其他对象去指向这个gc roots 顶点,如果能指到顶点,说明这个对象不是一个垃圾,反之是               
​                        class 文件-->(类加载器 父类双亲委派机制)         RuntimeDataArea
​                         1.栈  2.堆   3.方法区(元空间)  4.pc 寄存器  5.本地方法栈
​                                        执行引擎   native interface   native lib....
​                            





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2