- 博客(18)
- 收藏
- 关注
原创 JAVA 使用线程池
Java语言虽然内置了多线程支持,启动一个新线程非常方便,但是,创建线程需要操作系统资源(线程资源,栈空间等),频繁创建和销毁大量线程需要消耗大量时间。那么我们就可以把很多小任务让一组线程来执行,而不是一个任务对应一个新线程。这种能接收大量小任务并进行分发处理的就是线程池。简单地说,线程池内部维护了若干个线程,没有任务的时候,这些线程都处于等待状态。如果有新任务,就分配一个空闲线程执行。如果所有线程都处于忙碌状态,新任务要么放入队列等待,要么增加一个新线程进行处理。Java标准库提供了因为。
2025-04-28 17:12:01
909
原创 Java-线程同步
当多个线程同时运行时,线程的调度由操作系统决定,程序本身无法决定。因此,任何一个线程都有可能在任何指令处被操作系统暂停,然后在某个时间段后继续执行。这个时候,有个单线程模型下不存在的问题就来了:如果多个线程同时读写共享变量,会出现数据不一致的问题。上面的代码很简单,两个线程同时对一个int变量进行操作,一个加10000次,一个减10000次,最后结果应该是0,但是,每次运行,结果实际上都是不一样的。这是因为对变量进行读取和写入时,结果要正确,必须保证是原子操作。
2025-04-24 17:42:33
887
原创 多线程基础
CPU执行代码都是一条一条顺序执行的,但是,即使是单核cpu,也可以同时运行多个任务。因为操作系统执行多任务实际上就是让CPU对多个任务轮流交替执行。例如,假设我们有语文、数学、英语3门作业要做,每个作业需要30分钟。
2025-04-22 17:19:58
848
原创 JAVA-IO->Reader
Reader是Java的IO库提供的另一个输入流接口。和的区别是,是一个字节流,即以byte为单位读取,而Reader是一个字符流,即以charbytecharint read()int read()这个方法读取字符流的下一个字符,int,范围是065535。如果已读到末尾,返回-1。如果我们读取一个纯ASCII编码的文本文件,上述代码工作是没有问题的。但如果文件中包含中文,就会出现乱码,因为FileReader默认的编码与系统相关,例如,Windows系统的默认编码可能是GBK,打开一个UTF-8。
2025-04-14 21:08:38
879
原创 Filter模式
Java的IO标准库提供的当我们需要给一个“基础”附加各种功能时,我们先确定这个能提供数据源的,因为我们需要的数据总得来自某个地方,例如,紧接着,我们希望能提供缓冲的功能来提高读取的效率,因此我们用包装这个,得到的包装类型是,但它仍然被视为一个最后,假设该文件已经用gzip压缩了,我们希望直接读取解压缩的内容,就可以再包装一个无论我们包装多少次,得到的对象始终是,我们直接用上述这种通过一个“基础”组件再叠加各种“附加”功能组件的模式,称之为Filter模式(或者装饰器模式:Decorator)。类似的,
2025-04-10 15:43:16
929
原创 Java-set
我们知道,Map用于存储key-value的映射,对于充当key的对象,是不能重复的,并且,不但需要正确覆写equals()方法,还要正确覆写hashCode()方法。如果我们只需要存储不重复的key,并不需要存储映射的value,那么就可以使用Set。SetSet<E>Set<E>实际上相当于只存储key、不存储value的Map。我们经常用Set用于去除重复元素。因为放入Set的元素和Map的key类似,都要正确实现equals()和hashCode()方法,否则该元素无法正确地放入Set。
2025-04-03 15:50:30
898
原创 java-使用EnumMap
因为HashMap是一种通过对key计算hashCode(),通过空间换时间的方式,直接定位到value所在的内部数组的索引,因此,查找效率非常高。如果作为key的对象是enum类型,那么,还可以使用Java集合库提供的一种EnumMap,它在内部以一个非常紧凑的数组存储value,并且根据enum类型的key直接定位到内部数组的索引,并不需要计算hashCode(),不但效率最高,而且没有额外的空间浪费。我们以DayOfWeek使用EnumMap的时候,我们总是用Map接口来引用它,因此,实际上把。
2025-04-01 21:36:58
740
原创 Java使用Map
Map这种键值(key-value)映射表的数据结构,作用就是能高效通过key快速查找value(元素)。用Map来实现根据name查询某个Student这种键值(key-value)映射表的数据结构,作用就是能高效通过key快速查找value(元素)。用Map来实现根据name查询某个StudentMap<K, V>是一种键-值映射表,当我们调用方法时,就把key和value做了映射并放入Map。当我们调用时,就可以通过key获取到对应的value。如果key不存在,则返回null。和List类似,
2025-04-01 20:55:16
661
原创 Java集合 -List
Java标准库自带的java.utilCollection,它是除Map外所有其他集合类的根接口。Java的java.utilListStudentListSetStudentSetMapStudentnameStudentMapjava.utilListSetMapIterator。
2025-03-27 17:52:41
800
原创 JAVA :异常处理
异常是一种,因此它本身带有类型信息。异常可以在任何地方抛出,但只需要在上层捕获,这样就和方法调用分离了:因为Java的异常是,它的继承关系如下:从继承关系可知:是异常体系的根,它继承自。有两个体系:和,表示严重的错误,程序对此一般无能为力,例如:而则是运行时的错误,它可以被捕获并处理。某些异常是应用程序逻辑处理的一部分,应该捕获并处理。例如:还有一些异常是程序逻辑编写不对造成的,应该修复程序本身。例如:又分为两大类:Java规定:捕获异常使用语句,把可能发生异常的代码放到中,然后使用捕获对应的及
2025-03-19 15:08:31
805
原创 JAVA 核心类->JavaBean;枚举类;记录类
在Java中,有很多classprivatepublic那么这种class被称为JavaBean,我们通常把一组对应的读方法(getter)和写方法(setter)称为属性(property可以看出,getter和setter也是一种数据封装的方法。avaBean主要用来传递数据,即把一组数据组合成一个JavaBean便于传输。此外,JavaBean可以方便地被IDE工具分析,生成读写属性的代码,主要用在图形界面的可视化设计中。通过IDE,可以快速生成getter和setter。然后,点击右键,
2025-03-11 22:43:18
799
原创 Java核心类->StringJoiner;包装类型
给StringJoiner输出: Hello Bob, Alice, Grace!这段代码创建了一个实例,它使用","作为元素之间的分隔符,“Hello ”作为前缀,!作为后缀。String还提供了一个静态方法join(),这个方法在内部使用了来拼接字符串,在不需要指定“开头”和“结尾”的时候,用输出:Bob, Alice, Gracebyteshortintlongbooleanfloatdoublecharclassinterface引用类型可以赋值为null,表示空,但基本类型不能赋值为null。
2025-03-10 22:37:08
782
原创 Java核心类->StringBuilder
虽然可以直接拼接字符串,但是,在循环中,每次循环都会创建新的字符串对象,然后扔掉旧的字符串。这样,绝大部分字符串都是临时对象,不但浪费内存,还会影响GC效率。,我们也可以设计支持链式操作的类。可以支持链式操作,实现链式操作的关键是返回实例本身;,它是一个可变对象,可以预分配缓冲区,这样,往。的源码,可以发现,进行链式操作的关键是,定义的。为了能高效拼接字符串,Java标准库提供了。,这样,就可以不断调用自身的其他方法。是可变对象,用来高效拼接字符串;的线程安全版本,现在很少使用。
2025-03-10 14:24:22
178
原创 Java核心类 -字符串和编码
Java字符串的一个重要特点就是字符串不可变Java 中字符串的不可变指的是一旦一个String对象被创建,它所包含的字符序列就不能被改变。这里的 “不可变” 并非指不能创建新的字符串对象,而是说已创建的字符串对象本身的内容不能被修改。当对一个String对象执行诸如拼接、替换等操作时,实际上是创建了一个新的String对象,而原对象保持不变。
2025-03-07 17:36:39
605
原创 Java 面向对象编程
特性Java 类C++ 类文件与类的关系一个文件只能有一个public类,类名与文件名一致一个文件可以包含多个类,类名与文件名无关内存管理自动垃圾回收手动管理内存继承单继承,多接口实现支持多继承访问控制默认包内可见默认私有构造函数与析构函数有构造函数,无析构函数有构造函数和析构函数多态性默认支持多态需要显式声明虚函数头文件与源文件不需要头文件需要头文件和源文件分离Java 更注重简洁性和安全性,而 C++ 更注重灵活性和性能。选择哪种语言取决于具体的应用场景和需求。
2025-03-04 21:54:54
846
原创 Java 程序基础
语法和标准库:Java使用Scanner或,而C++使用cin或来处理输入。性能与灵活性在Java中提供更高的读取效率,适用于大规模数据输入;而在C++中,能够方便地读取包含空格的整行输入。资源管理:在Java中,对于Scanner或,建议显式调用close()方法关闭流,避免资源泄露。在现代C++中,使用RAII(Resource Acquisition Is Initialization)原则,通常不需要手动关闭cin,但对于文件流等资源,仍然需要注意资源的正确释放。错误处理。
2025-02-25 21:20:56
574
原创 安装openEuler release 20.03 使能yum 解 决Error: There are no enabled repositories in “/etc/yum.repos.d“, “
下载欧拉的isohttp://xxxxxx/resource/isos/euler/openEuler/aarch/openEuler-20.03-LTS-everything-aarch64-dvd.is安装系统步骤省略 。。。。。。。网络配置:配置ip,子网掩码,网关安装完成后使用yum报错:解决方法:cd yum.repos.dvi openEuler_aarch64.repo添加一下内容:#generic-repos is licensed ...
2021-04-28 11:44:44
3669
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人