自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JAVA基础:死锁和线程的生命周期

最常用的就是通过join方法,实现确保所有的其他线程都执行完毕,当前线程再继续执行。睡眠期间,一旦被其他线程调用了当前线程的interrupt方法中断,会抛出异常。插队,当前线程调用指定线程对象的join方法,将指定线程加入当前线程的执行序列。在线程同步过程中,因为多线程争抢锁资源,所以有些线程会执行,有些线程会等待。指定睡眠时间,时间过后,自动唤醒,唤醒后,线程进入就绪状态,准备争抢CPU。在上图中可以看到,有一个中断线程的过程,中断线程的方式有很多。让步,当前线程让出CPU,与其他线程重新争抢CPU。

2024-10-12 09:38:56 377

原创 JAVA基础:AtomicInteger

在多线程的环境下,一旦涉及到多个线程共享变量的加加减减操作,就会出现线程安全问题。这时候可以使用类型的变量进行加加减减AtomicInteger的常用方法//获得变量值(不是同步的)//给变量赋值(不是同步的)//等价于count++//等价于++count//等价于count--//等价于--count//等价于count += vAtomicInteger的底层AtomicInteger底层使用了CAS算法,所以不会出现同步问题。

2024-09-29 13:50:42 474

原创 JAVA基础:lock锁底层机制

当多个线程同时访问lock.lock()方法时,每个线程都尝试着将状态从0改为1. 假设a线程最先完成状态改变,a线程获得了锁。此时b线程也尝试将0改为1,先获得原始值0,将0改为1,再将改好的1替换原始值0(赋值)lock锁底层使用的是CAS + AQS,在lock底层有一个计数器,记录锁被获取的状态,起初为0 , 当被抢占的时候变为1。而是将需要等待的线程,存入了一个集合,并使其进入最终等待状态(jvm级别的等待状态)如结发生了变化,说明这个过程中被其他线程捷足先登了,其他的线程获得锁,当前线程等待。

2024-09-25 20:22:33 1487

原创 JAVA基础:Lock锁

因为synchronized锁在使用时存在着一定的不足,所以在jdk1.5时,提供了一个java 并发 工具包。里面包含了许多与多线程操作相关的工具类,其中就包含了Lock系列。

2024-09-21 09:48:09 623

原创 JAVA基础:线程同步问题和synchronized锁

我们知道线程是用来提升代码的效率而出现的,想要提升效率就意味着要有多个线程同时工作,这时就会出现线程同步问题。当多个线程操作同一个共享资源时就会出现线程同步问题。

2024-09-18 18:29:17 1302

原创 JAVA基础:线程优先级和精灵线程

线程存在的目的是为了提升代码的效率,以前的程序只有主线程自己执行是串行的,这样的代码效率低 ,多线程执行的代码是并行的,多个线程同时执行代码,这样的效率高,但是线程并不是越多越好,线程的执行需要获取CPU才能执行,而CPU的数量是有限的,并且java的线程还是抢占式的,这时就会出现一个问题,如果有一个线程要执行的代码是更重要的,我们需要让这个线程更早的执行,如果线程的优先级都一样就可能会导致这个线程一直抢不到CPU。

2024-09-16 13:44:49 587

原创 JAVA基础:线程

我们编写的所有静态的代码都是程序,而进程是一个正在运行的程序,当程序运行时需要内存空间所以进程也 = 执行内存 + 线程,每当启动一个进程时,至少会有一个线程,称为:主线程。线程是程序运行的过程中,真正用来执行程序功能的那个单元,可以根据设计需求,由主线程产生更多的子线程,共同完成程序的执行过程。多线程的目的就是为了提高执行效率。

2024-09-11 19:08:13 1794

原创 JAVA基础:lambda表达式(下)

lambda的方法引用是特定情况下对lambda表达式的进一步简化,如果lambda的方法体中只有一行代码,而且这行代码是调用了另一个方法,调用的方法需要与当前lambda的方法有相同的数据处理,也就是对lambda方法传递了n个参数,lambda没有对参数进行任何操作原封不动的传递给另一个参数。如果lambda方法有返回值。其调用方法的返回值,lambda会原封不动的返回给调用者。当lambda中引用的是一个对象的方法。当lambda中引用的是一个类的方法。当lambda中引用的是一个构造方法。

2024-09-10 18:03:13 793

原创 JAVA基础:Lambda表达式(上)

Lambda表达式是jdk1.8的一个新特性,他属于一种语法堂主要作用是对匿名内部类语法简化。

2024-09-09 19:57:30 506

原创 JAVA基础:Properties集合

Properties集合是一个map集合,他也有key,value键值对他的作用就是和Properties文件进行交互Properties集合中的数据可以写入Properties文件Properties文件的数据也可以读到Properties集合中那么什么是Properties文件呢?

2024-09-04 21:29:37 1663

原创 JAVA基础:序列化知识扩展

再给对象序列化时,会涉及一些关键字,这些关键字有不同的功能可以解决一些序列化过程中的问题。

2024-09-03 21:33:38 532

原创 JAVA基础:对象流

之前的流我们都是使用他们读取一些字节或者字符的数据,但是在实际的应用中数据的类型除了基本数据类型之外,还有引用数据类型,对象流就是能读取引用数据类型的流。

2024-09-02 18:54:19 1068

原创 JAVA基础:数组流

在使用之前学习的流读数据时都是从文件中读取数据,再把数据写入文件,在一些特殊的业务场景下我们可能会需要把读到的数据写到数组中,这就可以用到数组流。

2024-08-28 19:14:39 1427

原创 JAVA基础:缓冲流

之前我们在使用输入流读取文件时每读一次文件就会通过输入流向程序中加载一次数据,使用输出流时,每次都要向硬盘中写入数据,如果我们读取数据的次数特别频繁就会影响性能,这种时候我们就要考虑能不能将这些数据存到一个缓冲区,当这个缓冲区满足一定的条件时再将数据写入文件或者程序,这种时候就要使用缓冲流。

2024-08-27 18:26:22 527

原创 JAVA基础:文件字符流

上一篇我们知道了如果在使用输入流读取数据时,数据中含有中文就会出现乱码的情况,这时就要使用字节字符转换流这个过程流来处理一下,针对这种情况我们可以直接使用文件字符流来读取数据。

2024-08-26 18:00:39 406

原创 JAVA基础:字节字符转换流

当我们使用流读取数据时,如果这个数据中含有中文,我们对这个数据进行操作就会出现乱码问题,这时候我们要使用字节字符转换流来处理一下数据。

2024-08-21 19:03:51 867

原创 JAVA基础:IO流

io流是一个流动的管道,负责将我们在内存中的数据保存到硬盘上,在之前我们每次运行程序时所有的数据都是存储在内存中的,当我们的程序终止时这些数据就会消失,而当我们使用了io流之后我们就可以把这些数据保存在硬盘上实现永久存储。

2024-08-20 17:51:19 737

原创 JAVA基础:File类

file类表示的是系统中的一个文件或者文件夹file类和系统中的文件或者文件夹不需要是一一对应的,我们可以在file类中写你系统中不存在的文件或文件夹file类中存储的实际上是文件或文件夹的抽象路径,这些路径可以是绝对路径也可以是相对路径。

2024-08-19 19:53:27 516

原创 JAVA基础:map系列集合

我们之前说map系列的集合每个元素存储的是一对数据我们称为键值对,其中键(key)的值是无序,没有索引,不能重复的。值(value)的值是无序,可重复的,没有索引的,我们上一次学习的set集合其实就是使用了map集合,我们常用的map集合有HashMap , TreeMap , Hashtable。

2024-08-15 15:23:45 2393

原创 JAVA基础set系列集合

set系列集合存储的数据是不可重复的,没有索引的,存取是无序的。在set集合中有两个我们主要要学习的实现类。

2024-08-13 20:08:24 853

原创 JAVA基础:List系列集合

上一篇我们说了list集合是单列集合,并且所有实现了list接口的集合都是有序的,有索引,可以重复的,在list系列集合中我们有三个要学习的实现类。

2024-08-12 18:36:31 748

原创 JAVA基础:初步认识集合

集合就是一个容器,在java中有很多的集合,他们的本质都是容器,只是底层使用了不同的接口来定义规则,使用了不同的数据存储结构来储存数据,不同的数据结构之间有各自的优缺点,有的得到指定位置的数据很快但是插入删除慢,有的插入删除快,但是想得到指定位置的数据慢。

2024-08-08 14:03:43 588

原创 JAVA基础:StringBuilder可变字符串

在上一章我们了解了string字符串,我们说string字符串是不可变字符串,而除了string字符串还有两个字符串,StringBuilder和StringBuffer。

2024-08-07 15:15:48 717

原创 JAVA基础:String的常用方法

上一篇我们学习了string字符串的基本用法,以及string字符串的内部机制,而string也是一个类,他的内部也有很多已经给我们封装好的,方便我们操作字符串的方法,我们是不可能将内部的方法全部记住的,我们只要知道方法是怎么使用的有什么样的效果就行,今天我也只会学习一些常见的方法。

2024-08-05 13:11:31 502

原创 JAVA基础:String字符串

关于String字符串我们并不陌生,在我们的程序中经常使用String这个类,甚至有的同学会把string当成基本数据类型,今天我们就来了解一下String这个类。

2024-08-03 15:59:23 640

原创 JAVA基础:泛型(下)

上一篇我们学习了如何定义泛型和如何使用泛型,今天我们来学习一些泛型中的其他知识点,泛型通配符和泛型边界。

2024-07-31 18:35:48 685

原创 JAVA基础:泛型(上)

当我们在进行封装时,如果遇到一些不确定的类型,在之前我们会使用object,但是这样当我们取数据时需要手动进行下转型,而当我们使用了泛型后,就可以在创建对象时或者使用方法时确定类型

2024-07-30 16:31:18 592

原创 JAVA基础:异常(下)

那么我们知道了怎么产生异常,我们要怎么处理异常呢?能不能让我们的程序即使出现异常也不停止呢?我们来看看如何处理异常

2024-07-24 13:10:22 876

原创 JAVA基础:异常(上)

我们在编写代码时经常会遇到程序报错的情况,在java中我们给这种现象起名叫做异常,其实这些各种各样的异常也是一个一个的类对象。

2024-07-23 17:51:08 638

原创 JAVA基础:内部类

内部类顾名思义就是内部的类,那么是谁的内部呢?内部类分为方法的内部和类的内部,定义在方法的内部的内部类叫做局部内部类,定义在类的内部的内部类叫做成员内部类。

2024-07-22 19:19:42 540

原创 几种基本数据结构

在我们编写程序时,经常会出现需要存储数据的情况,而数据的存储是有讲究的,数据不是在我们的内存中胡乱存储,为了保证数据在进行修改和查找时更加方便,我们就要学习数据结构(也就是数据的存储结构)

2024-07-20 18:22:40 732

原创 JAVA基础:抽象方法和接口

Java中的抽象方法指的就是不具体的方法,这和我们在现实中理解的抽象是差不多的,都是指不具体的东西,那么这种不具体的代码在java中如何体现呢?abstract关键字修饰的方法就表示这个方法是一个抽象方法,抽象方法没有方法体,其他的地方与普通方法一致那么这种没有方法体的抽象方法有什么用呢?

2024-07-19 15:58:03 623

原创 JAVA基础:运用分包思想编写汽车管理系统

在编写Java业务的时候我们应该充分运用分包思想将不同功能的类放在不同的包里,如果我们将所有的类都放在同一个包中,以后维护起来也会很麻烦。我们今天就要用这种思想编写一个汽车管理系统,系统能添加汽车信息和查看汽车信息分包后可以使我们的代码看起来逻辑更加清晰,同样功能的代码都放在同一个包里,以后维护和修改起来也会更加方便。

2024-07-18 16:25:44 1082

原创 JAVA基础:包的概念和使用

package 包名;如果包有多层目录要使用.来隔开。

2024-07-01 15:01:28 1013

原创 封装储存工具三:实现给数组按照条件进行排序功能

1,我们在user类中编写了两个方法(这里其实是重新定义了两个类,在新的类中编写的方法,目的是为了一次展示多个方法,因为方法重写方法名和参数列表必须一样,所以没法构成重载,只能在新的类中编写,自己写时只有一个方法可以直接让user继承排序比较器父类然后重写方法)一个方法是按照姓名进行排序,另一个是按照年龄进行排序。3,在用姓名排序的方法中我们使用了compareto方法,这个方法的作用是对两个字符串进行计较,如果调用方法的字符串比参数里的字符串小返回一个负数,反之返回一个正数。

2024-06-29 14:47:55 746

原创 封装储存工具二:实现删除功能和其他功能

1,这样在box中就能拿到各种各样类型的各种删除方式了,我们调用方法后会得到Boolean值,如果为真就说明找到了满足条件的对象,直接调用我们上面写的按照索引删除数据的remove方法即可完成删除操作,而且这个方法可能会删除多个数据,因为条件和索引不一样,索引是唯一的,条件可能多个对象满足。2,经过分析想要通过名字删除数据,需要给我传递删除的条件,以及数组中的每个数据,所以定义两个参数,condition保存条件,obj代表数组中每个数据,这也意味着我们想使用这个方法需要用到循环,将数组的数据传递过去。

2024-06-25 15:06:05 1023

原创 封装储存工具一:实现添加功能

1,添加功能本身其实很好实现,用户想要添加数据,肯定要告诉我这个工具你要添加的内容,所以我,们在方法的参数列表中要准备一个变量接受用户传递的参数,这里也用到了上转型,因为我不知道你要传递的是什么类型的数据,所以使用object类型。2,首先判断index的长度是否等于数组的长度,如果相等了那必然需要扩容,扩容无非就是创建一个长度更大的新数组将旧数组的数据放进去,所以在创建新数组之前我们应该考虑新数组的长度应该是多少。3,添加的代码到这就写完了,但是我们需要考虑数组容量问题,所以我们应该编写数组扩容的代码。

2024-06-24 18:47:51 987

原创 JAVA面向对象三大特征之多态

多态指的是事物的多种形态,Java中有很多类,类和类之间又有继承关系,我们可以把这些类看做成单独的个体,而父类是包含子类的一种数据类型,所以父类是子类的另一种形态,这就是多态。多态是指在出现继承关系之后,使用父类的引用去保存子类的对象,这样做可以具有不同的数据类型或表现出不同的行为,使代码的灵活性提高。那么什么是父类的引用保存子类的对象呢?

2024-06-19 15:29:11 650

原创 JAVA方法的重写和final关键字

java中方法的重写只发生在继承关系中,指子类对父类中存在的方法的方法体进行重新编写。子类中方法的名称、返回值类型、参数列表与父类相同,只有方法体中的代码不同代码演示​​我们定义了一个person父类和一个学生子类,并让子类继承了父类,这时就可以在子类中重写父类中的方法,对父类方法的功能进行扩展。

2024-06-18 16:07:01 715

原创 java中的super关键字讲解

1,super关键字只能出现在继承关系中2,当子类和父类的属性重名是即可使用super关键字来调用父类的属性3,使用super(参数列表);代码即可调用父类的构造方法4,当父类方法和子类方法重名时可以使用super来调用父类方法,这种情况就是方法的重写。

2024-06-17 17:14:20 616

空空如也

空空如也

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

TA关注的人

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