WS好好学习
码龄8年
关注
提问 私信
  • 博客:70,872
    70,872
    总访问量
  • 40
    原创
  • 1,274,110
    排名
  • 12
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:安徽省
  • 加入CSDN时间: 2016-11-15
博客简介:

Jhon1994的博客

查看详细资料
个人成就
  • 获得54次点赞
  • 内容获得2次评论
  • 获得10次收藏
创作历程
  • 21篇
    2020年
  • 1篇
    2019年
  • 22篇
    2018年
  • 3篇
    2017年
成就勋章
TA的专栏
  • javaSE
    18篇
  • javaWEB
  • javaEE
    8篇
  • 工具
    2篇
兴趣领域 设置
  • 大数据
    mysqlredis
  • 后端
    spring架构
  • 搜索
    elasticsearch
  • 服务器
    linux
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

线程状态

**Java线程的生命周期有如下六种**![在这里插入图片描述](https://img-blog.csdnimg.cn/20200514214849965.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pob24xOTk0,size_16,color_FFFFFF,t_70#pic_center)**Java线程的生命周期一直在不同的状态间
原创
发布博客 2020.05.14 ·
229 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

线程上下文切换

多线程编程中,一般线程的个数都大于CPU的个数,而一个CPU核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU才去的策略是为每个线程分配时间片并轮转的形式。当一个线程的时间用完时就会重新处于就绪状态,CPU的使用交给其他线程,完成一次上下文切换。概括来说就是:当前任务在执行完 CPU 时间片切换到另一个任务之前会先保存自己的状态,以便下次再切换回这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。上下文切换通常是计算密集型的。也就是说,它需要相当可观的
原创
发布博客 2020.05.14 ·
318 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

关于死锁

1.什么是死锁线程死锁描述的是这样一种情况:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RF3veVpN-1589463851327)(/img/java/2019-4死锁1.png)]2.死锁产生的条件互斥条件:该资源任意
原创
发布博客 2020.05.14 ·
241 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

sleep&wait

1.关于sleep()和wait()两者最主要的区别在于:sleep 方法没有释放锁,而 wait 方法释放了锁 。两者都可以暂停线程的执行。Wait 通常被用于线程间交互/通信,sleep 通常被用于暂停执行。wait() 方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的 notify() 或者 notifyAll() 方法。sleep() 方法执行完成后,线程会自动苏醒。或者可以使用 wait(long timeout)超时后线程会自动苏醒。2.关于start()与run(
原创
发布博客 2020.05.14 ·
241 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JVM

一、Java的内存区域先放一张图1.运行时数据区域按照线程的公私有进行划分线程私有的程序计数器、虚拟机栈、本地方法栈线程共享的堆、方法区、直接内存1.1程序计数器程序计数器是一块较小的内存区域,可以看作是当前线程所执行字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来获取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等功能都需要依赖计数器完成。为...
原创
发布博客 2020.05.06 ·
195 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

HashMap的长度为什么是2的次幂

我们知道Hash 值的范围值-2147483648到2147483647,只要hash值映射的比较松散是很难出现hash冲突的,这样数组的长度加起来会超过40亿,内存中无法存放,所以使用hash值之前与数组长度进行取余操作,结果作为数组的下标,数组下标的计算方法是(n-1)& hash ,n为数组长度,大家可能会疑惑,为什么不是 hash%n ,其是是这样的,hash%n==hash&am...
原创
发布博客 2020.05.05 ·
211 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

HashMap的底层实现

HashMap在1.8和1.8之前的变化1. JDK1.8之前HashMap底层是使用数组和链表结合在一起使用,即链表散列。HashMap通过key的HashCode经过扰动函数hash(int h)处理后得到hash值,然后通过((n-1)& hash)确定该元素存放的位置,if 当前位置已存在元素,就判断当前位置的元素hash值以及key 是否相同,如果相同则直接覆盖,不相同就通过...
原创
发布博客 2020.05.04 ·
181 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

HashMap与HashSet的区别

HashSet检查重复HashSet的底层是基于HashMap实现的。当把对象加入HashSet时,调用add(E e)方法,发现调用的是map的put方法public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializ...
原创
发布博客 2020.05.04 ·
266 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

HashMap与HashTable的区别

1.HashMap与HashTable的对比对比点HashMapHashTable线程安全否是效率高低null key, null value的支持是否2.HashMap与HashTable扩容的不同点创建时如果不指定初始容量HashTable的初始容量为11,负载因子为0.75扩容的时机,当entry的数量大于阈值((int)(capa...
原创
发布博客 2020.05.04 ·
164 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

ArrayList的扩容机制

一 先从 ArrayList 的构造函数说起ArrayList有三种方式来初始化,构造方法源码如下: /** * 默认初始容量大小 */ private static final int DEFAULT_CAPACITY = 10; private static final Object[] DEFAULTCAPACITY_EMPTY_ELE...
原创
发布博客 2020.05.02 ·
214 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

java 集合框架之List,Set,Map

List,Set,Map的区别List (顺序):List接口存储一组不唯一,有序的对象Set(无序):不允许重复的集合。不会有多个元素引用相同的对象。Map(key-value键值对):Map会维护与Key有关联的值,两个key可以引用相同的对象,key不能重复,key可以是String也可以是任何对象。ArrayList与LinkedList的区别ArrayList与Linke...
原创
发布博客 2020.05.02 ·
282 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

java queue

Java queueQueue设计用于在处理之前保留元素的集合。 除了基本的Collection操作之外,队列还提供额外的插入,提取和检查操作。 这些方法中的每一种都有两种形式:如果操作失败,则抛出一个异常,另一种返回一个特殊值( null或false ,具体取决于操作)。 插入操作的后一种形式专门设计用于容量限制的Queue实现; 在大多数实现中,插入操作不能失败Queue的实现Ab...
原创
发布博客 2020.05.02 ·
168 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Arrays.asList使用

1.看到这这个Arrays就会想到这是操作数组的工具类,但是这个工具类有你想不到的坑。假如你这么使用 public static void main(String[] args) { String[] array = {"1", "2", "3"}; List<String> list = Arrays.asList(array); ...
原创
发布博客 2020.04.18 ·
176 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

BigDecimal的用处

1.浮点数比较存在的问题 public static void main(String[] args) { float a = 1.0f - 0.9f; float b = 0.9f - 0.8f; System.out.println(a);// 0.100000024 System.out.println(b);// ...
原创
发布博客 2020.04.15 ·
657 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

Java中的IO流

1.流的分类按照流的方向:输入流和输出流按照操作单元划分:字节流和字符流按照流的角色:节点流和处理流Inputstream/Reader 输入流,前者为字节输入流,后者为字符输入流Outputsteam/Writer 输出流,前者为字节输出流,后者为字符输出流流的分类结构图摘自《https://snailclimb.gitee.io/javaguide》...
原创
发布博客 2020.04.15 ·
143 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

String,StringBuilder,StringBuffer的区别

1.StringString中使用final char value[]来存储字符串,所以String字符串是不可变的public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for cha...
原创
发布博客 2020.04.14 ·
127 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

重载与重写的区别

区别点 重载overload 重写override 发生位置 同一个类中 子类 参数列表 必须修改 一定不能修改 返回类型 可修改 不可修改 异常类型 可修改 异常范围小于等于父类 访问修饰符 可修改 大于等于父类 发生阶段 编译器 运行期 1.重写重写发生在运行期,是子类对父类的允...
原创
发布博客 2020.04.13 ·
173 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java基本数据类型比较

基本类型 位数(bit) 最小值 最大值 包装器 boolean -- -- -- Boolean byte 8bit -128 +127 Byte char 16bit unicode Character short 16bit -2^15 +2^15-1 ...
原创
发布博客 2020.04.13 ·
242 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JVM,JDK,JRE你区分过吗?

JVM 运行Java字节码的虚拟机,JVM针对于不同的操作系统具有不同的实现,.class文件不面向任何特定的处理器,只面向jvm,从而保证了java的平台无关性。 JDK 功能齐全的Java SDK拥有jre的一切,包含编译器和其他工具,能够创建和编译程序。 JRE Java运行时环境,运行已编译的Java程序的内容集合,包括JVM,Java类库等,不能用于创建新程序。...
原创
发布博客 2020.04.13 ·
176 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

面向对象与面向过程的区别

特点 面向对象 面向过程 维护 Y N 扩展 Y N 复用 Y N 性能 N?? Y?? 关于性能问题:1.面向对象(表象):类调用时需要实例化,开销比较大,比较耗费资源。2.根本原因:Java是半编译语言最终执行的代码不是cpu能够执行的二进制机械码3.面向过程语言大多数编译成机械码直接运行,并不是所有的...
原创
发布博客 2020.04.13 ·
135 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多