java
文章平均质量分 68
s11show_163
这个作者很懒,什么都没留下…
展开
-
i++的线程安全问题
谁不安全?https://blog.csdn.net/huike_/article/details/78368852首先i++是不安全的,++i是安全的,这一点要从汇编角度去考虑:i++在函数压栈过程前:1,先取内存数据段i的值,存入一个临时量中;2,然后进行自加,再写入内存数据段的i中;3,等待所有参数运算完成后,最后压栈时,将保存的临时量的值进行压栈。++i在函数压栈过程前:1,直接取内存数据段的i值,进行自加,再写入内存数据段的i中;2,等待所有参数运算完成后,最后压栈时,直接取原创 2021-04-01 23:35:49 · 754 阅读 · 1 评论 -
volatile和synchronized的区别
volatile和synchronized的区别volatile和synchronized特点首先需要理解线程安全的两个方面:执行控制和内存可见。执行控制的目的是控制代码执行(顺序)及是否可以并发执行。内存可见控制的是线程执行结果在内存中对其它线程的可见性。 根据Java内存模型的实现,线程在具体执行时,会先拷贝主存数据到线程本地(CPU缓存),操作完成后再把结果从线程本地刷到主存。synchronized关键字解决的是执行控制的问题,它会阻止其它线程获取当前对象的监控锁,这样就使得当前对象中被s原创 2021-03-16 23:23:12 · 99 阅读 · 0 评论 -
java与c++区别
Java和C++的区别:1. Java源码会先经过一次编译,成为中间码,中间码再被解释器解释成机器码。对于Java而言,中间码就是字节码(.class),而解释器在JVM中内置了。2. C++源码一次编译,直接在编译的过程中链接了,形成了机器码。3. C++比Java执行速度快,但是Java可以利用JVM跨平台。4. Java是纯面向对象的语言,所有代码(包括函数、变量)都必须在类中定义。而C++中还有面向过程的东西,比如是全局变量和全局函数。5. 转载 2021-03-01 00:11:27 · 89 阅读 · 0 评论 -
java为什么不能多继承
作者:Charlie W链接:https://www.zhihu.com/question/24317891/answer/65289659来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。先举一个多重继承的例子,我们定义一个动物(类)既是狗(父类1)也是猫(父类2),两个父类都有“叫”这个方法。那么当我们调用“叫”这个方法时,它就不知道是狗叫还是猫叫了,这就是多重继承的冲突。而java对此的解决方法是,一个物体的本质只能有一个。一个动物只能是狗或只能是猫,如果你想创造一原创 2021-03-01 00:10:22 · 99 阅读 · 0 评论 -
java: 抽象类与接口和c++中接口和虚函数的区别,java可以多继承吗?
转自https://blog.csdn.net/weixin_36571185/article/details/89523514一、对比图表JAVAC++普通函数虚函数,用Virtual标识抽象函数abstract纯虚函数,用Virtual标识 ,且函数=0抽象类抽象类,和java概念一样interface接口纯虚类,所有的函数都是纯虚函数。纯虚函数和虚函数的区别在于前者不包含定义,而后者包含函数体。二、C++虚函数与JAVA中抽象函数比较1:j.原创 2021-03-01 00:08:46 · 406 阅读 · 0 评论 -
java随笔——HashMap与红黑树
前言:hashmap是一种很常用的数据结构,其使用方便快捷,接下来笔者将给大家深入解析这个数据结构,让大家能在用的时候知其然,也知其所以然。一.Map首先,从最基本的讲起,我们先来认识一下map是个什么东西。在我们写程序的时候经常会遇到数据检索等操作,对于几百个数据的小程序而言,数据的存储方式或是检索策略没有太大影响,但对于大数据,效率就会差很远。我们来讨论一下这个问题。1.线性检索:线性检索是最为直白的方法,把所有数据都遍历一遍,然后找到你所需要的数据。其对应的数据结构就是数组,链表等线性结构,原创 2021-02-24 20:17:22 · 236 阅读 · 0 评论 -
后台面试经典问题-手写LRU算法
LRU,Least Recently Used,最近最久未使用。常用于页面置换算法。是为虚拟页式存储管理服务的。对于在内存中又不用的数据块,称为LRU,操作系统会根据哪些数据属于LRU而将其移出内存。对于操作系统的内存管理,如何节省利用容量不大的内存为最多的进程提供资源,一直是研究的的热点。而内存的虚拟存储管理,是现在最通用最常见的方式–在内存有限的情况下,扩展一部分外存作为虚拟内存。虚拟页式存储管理,则是将进程所需空间划分为多个页面,内存中只存放当前所需页面,其余页面放入外存的管理方式。对于页面置换算原创 2021-02-24 20:13:50 · 118 阅读 · 0 评论 -
HashMap和Hashtable的区别
http://www.cnblogs.com/lzrabbit/p/3721067.html#h1HashMap和Hashtable的区别两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步,因此相对而言HashMap性能会高一些,我们平时使用时若无特殊需求建议使用HashMap,在多线程环境下若使用HashMap需要使用Collections.synchronizedMap()方法来获取一个原创 2021-02-24 20:13:05 · 59 阅读 · 0 评论 -
4种常用线程池介绍
一. 线程池简介线程池的概念:线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。线程池的工作机制2.1 在线程池的编程模式下,任务是提交给整个线程池,而不是直接提交给某个线程,线程池在拿到任务后,就在内部寻找是否有空闲的线程,如果有,则将任务交给某个空闲的线程。2.1 一个原创 2021-02-08 18:48:43 · 96 阅读 · 0 评论 -
request & response & servlet
占坑这个比较全:https://www.cnblogs.com/alsf/p/9236668.html这个前半部分可以:https://www.cnblogs.com/MrzhangKk/p/5334296.htmlhttps://developer.aliyun.com/article/684250这个是servlet:https://www.runoob.com/servlet/servlet-intro.html...原创 2021-01-30 23:28:15 · 39 阅读 · 0 评论 -
深入线程Thread类的start()方法和run()方法
摘自:https://cloud.tencent.com/developer/article/1136459一、初识java的线程是通过java.lang.Thread类来实现的。VM启动时会有一个由主方法所定义的线程。可以通过创建Thread的实例来创建新的线程。每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。通过调用Thread类的start()方法来启动一个线程。在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。.原创 2021-01-30 22:56:07 · 731 阅读 · 0 评论 -
java:List、Map、Set默认初始容量和扩容增量及加载因子 & 内存泄漏 & 线程安全
1.扩容加载因子的系数小于等于1,意指 即当 元素个数 超过 容量长度*加载因子的系数 时,进行扩容。eg:加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容Class初始大小加载因子扩容倍数底层实现是否线程安全同步方式ArrayList1011.5倍+1Object数组线程不安全-Vector1012倍Object数组线程安全synchronizedHashSet160.75f2倍HashMap&l原创 2021-01-30 21:19:20 · 1094 阅读 · 1 评论 -
java vs c++ 深入理解java垃圾回收机制
一、垃圾回收机制的意义Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。ps:内存泄露是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构的一般情况下,Java 的内存泄露表现为一个内存对象的生命周期超出了程序需要它的时间长度,我们有时也将其称为“对象游原创 2021-01-29 22:54:34 · 340 阅读 · 0 评论