自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 线程的生命周期,及之间的转换

线程的五种状态分为:new(创建线程)ready(就绪)running(运行)阻塞(block)销毁(destroy)线程生命周期图:1、新建状态(New):新创建了一个线程对象。2、就绪状态(Runnable):线程对象创建后,其它线程调用了该对象的start()方法。该状态的线程位于可执行线程池中,变得可执行,等待获取CPU的使用权。3、执行状态(Running):就绪状态的线程获取了CPU。执行程序代码。如果输入4、堵塞状态(Blocked):堵塞状态是线程由于某种原因放弃CPU使用权。

2020-08-04 18:28:21 200

原创 什么是线程安全问题,为什么会出现?怎么解决

第一个问题什么是线程安全线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。为什么会出现线程安全问题多线程操作共享资源时,导致共享资源出现错乱。线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。这就是一个

2020-08-04 18:02:21 883 2

原创 volatile关键字的作用

volatile用在多线程,同步变量。 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步。因此存在A和B不一致 的情况。volatile就是用来避免这种情况的。volatile告诉jvm, 它所修饰的变量不保留拷贝,直接访问主内存中的(也就是上面说的A)简单地说就是防止编译器对代码进行优化。比如如下程序:1234XBYTE[2]=0x55;XBYTE[2]=0x56;XBYTE[2]=0x57;XBYTE[2]=0x

2020-08-04 17:32:04 164

原创 synchronized和Lock的区别

synchronized 是Java 并发编程中很重要的关键字,另外一个很重要的是 volatile。Syncronized 的目的是一次只允许一个线程进入由他修饰的代码段,从而允许他们进行自我保护。Synchronized 很像生活中的锁例子,进入由Synchronized 保护的代码区首先需要获取 Synchronized 这把锁,其他线程想要执行必须进行等待。Synchronized 锁住的代码区域执行完成后需要把锁归还,也就是释放锁,这样才能够让其他线程使用。Lock 是 Java并发编程中很重要

2020-08-04 17:16:26 154

原创 HashMap的put过程内容简述

public V put(K key, V value) { return putVal(hash(key), key, value, false, true); }这是HashMap的put方法的源代码static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 默认初始化容量 向左移位4=2^4 = 16static final int MAXIMUM_CAPACITY = 1 <&lt

2020-07-28 19:49:29 383

原创 HashMap、Hashtable、ConcurrentHashMap三者间的异同

Hashtable 和 HashMap 的区别与联系1.两者都继承与map接口,所以两者的遍历方式大同小异2.Hashtable底层使用synchronize来进行修饰的,所以它是线程安全的,同步的,又由于它是线程安全的,所以它的效率较低,它的初始化的数组长度是11,它数组扩容的大小是原有数组长度的2倍+13.HashMap底层没用synchronize来进行修饰的,所以它是线程不安全的,不同步的,又由于它是不线程安全的,所以它的效率较搞,它的初始化长度为16是2的幂次方,它数组扩容的大小是原先数组长

2020-07-28 19:15:22 131

原创 HashSet、TreeSet和LinkedHashSet之间的关系

Set接口Set不允许包含相同的元素。Set是无序的,不能重复的,所有Set是没有get()方法的,因此不能使用常规的for循环遍历的Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,只要两个对象用equals方法比较返回true,Set就不 会接受这两个对象。HashSet是无序,且不能重复的,因为使用是Hash表实现。TreeSet排好序的集合,因为底层是一个二叉树。LinkedHashSet:有序(按添加的先后顺序),不能重复的。HashSet的存储的原理:底

2020-07-27 18:54:04 225

原创 Vector、ArrayList和LinkedList三个的异同之处

相同点:Vector、ArrayList和LinkedList都是List的接口的实现类,所以它们三个都有List集合身上的特点List是有序的,元素可重复的集合。请注意这里的有序指的是元素存入集合的顺序和取出的顺序一致。ArrayList和Vector都是基于动态的Object数组,他们两个的底层实现其实是类似的。不同点:ArrayList和Vector两个其中ArrayList是非线程安全的而Vector是线程安全的,但是ArrayList的效率比Vector快的多,并且我们一般常用的都Arr

2020-07-27 18:40:05 176

原创 ArrayList源码解析

ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的CopyOnWriteArrayList类。ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了RandomAcc

2020-07-26 19:13:39 66

原创 异常的处理

异常(Exception)我今天要和大家分享的是我刚学到的异常写的不对之处请大家指出来什么是异常?异常:软件在编译或者运行过程中,因为一些原因(BUG、用户使用不当、代码处理不当),而引起的程序奔溃的现象,叫做异常。异常的产生原因:1.Java 内部错误发生异常,Java 虚拟机产生的异常。2.编写的程序代码中的错误所产生的异常,例如空指针异常、数组越界异常等。这种异常称为未检査的异常,一般需要在某些类中集中处理这些异常。3.通过 throw 语句手动生成的异常,这种异常称为检査的异常,一般用

2020-07-25 22:50:15 85

原创 JAVA中系统常见类有哪些

第一个类呢是class这个类这个类一个是大家最熟悉的类了是系统默认所有类的父类Object相信大家对这个类一定都比较熟悉把,就算不熟悉也一定听过,

2020-07-25 21:08:00 593

原创 什么是面向对象

面向对象是一种编程思想面向对象还是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术[发展到一定阶段后的产物。面向对象的思想是:抽取类别,来构建该类别的实例对象。面向对象的思想主要分两种:1.基于对象:就是题主所说的,只要把数据和函数放在一起就可以了。2.多态:首先,方法可以在子类中重写;调用对象方法的时候,调用父类还是子类

2020-07-19 12:50:04 112

原创 数组

数组是容器,可以存储多个数据和字符。数组的定义:数组是存储在堆内存中一块连续内存,数组存储的数据类型必须是一致,大小固定。Java中的数组:数据类型[] 数组名称 = new 数据类型[size];数组中的元素是有下标的,下标从零开始,所以访问数组中的元素是通过数组下标来访问的。数组名称[下标] = 新值;注意:在数组这些容器中,如果访问不存在的下标,则会抛出越界异常,如数组:java.lang.ArrayIndexOutOfBoundsException...

2020-07-14 22:30:12 104

原创 函数

函数的定义:具有名称为了实现某一特定功能的代码的集合封装代码,提高代码的复用性。Java中的函数定义:语法结构访问修饰符 返回值的类型 函数名称([参数列表]) {// 函数体[return 返回值;]}Java中函数分类看是否有参数分为:有参函数和无参函数。有无返回值:有返回值函数和无返回值函数。局部变量:定义在函数内部的的变量只能在这个函数内部应用。...

2020-07-14 22:11:24 111

原创 循环语句

循环主要分为:for循环while循环do while循环break、continue关键字的使用break的作用:在循环中终止离它最近的那层循环continue关键字的作用:终止本次循环,进入下次循环for(定义变量;条件判断;索引变化){//循环体}for由四部分组成,第一步,是定义变量只执行一次,第二步,条件判断执行结果为真,进行第三步,执行循环内循环体的代码,第四步,索引变化。while循环 while(条件) { // 循环体}do while循环do {//

2020-07-14 21:58:38 93

原创 常见的运算符有哪些

常见的运算符有那些:算术运算符:(+,-,,/,%)算术运算符是一些数学最基础的运算符。关系运算符:(>,<,=,>=,<=,==,!=)这些运算符是用来进行比较的,而最终的比较结果是一个boolean值。逻辑运算符:与(&&,&)与表示的是两边的条件都要达成,前面的符号是断路与比后面的效率能高一点。或(||,|)或表示的两边的条件达成一个就成立,前面的符号是断路或比后面的效率也能高一点。非(!)非表示不成立。自加和自减运算符:自加:i++,++i

2020-07-14 21:20:41 7702

原创 数据类型和变量

数据类型:基本数据类型:数据型:整数型:byte——字符型shortint(默认整数的类型是int)long浮点型(小数):float——单精度浮点数double——双精度浮点数布尔类型(boolean)true 真false 假字符类型char 字符类型由单引号引起来引用数据类型:对象、List、 Set、Map、数组、字符串、万物皆对象变量:1.在程序运行过程中可以发生变化的量,变量是具有名称的内存。2.先声明后赋值...

2020-07-14 20:35:55 72

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除