
java基础以及JavaWeb
文章平均质量分 73
java基础
morning sunshine
用心记笔记。
展开
-
线程池的相关概念和参数以及源码分析
线程池就是创建一些线程,将它们的集合称之为线程池。使用线程池可以很好地提高系统的性能,线程池在系统启动时,即创建一些空闲的线程(核心线程),程序将一个任务交给线程池,线程池就会启动一个线程来执行这个任务。执行结束以后,该(核心)线程并不会死亡,而是再次返回线程池中,成为空闲状态,等待执行下一个任务。·①,创建一个线程池,;②,新建一个线程,在线程池中,新建一个Worker内部类时,会新建一个线程,并且会把这个Worker内部类本身传进去当作任务去执行,原创 2022-10-15 22:37:15 · 882 阅读 · 1 评论 -
两数相加的时候警惕int类型溢出
该题目是因为二分查找,但是两个数比较大,如果直接使用int类型相加,会出现溢出,导致二分查找一直出错。如果场景中,这两个数是可能比较大的,那么不能直接使用int类型进行相加,因为可能会出现溢出操作。...原创 2022-07-22 16:24:14 · 1205 阅读 · 0 评论 -
Double里边的NaN是什么?
先看源码:/** * A constant holding a Not-a-Number (NaN) value of type * {@code double}. It is equivalent to the value returned by * {@code Double.longBitsToDouble(0x7ff8000000000000L)}. */public static final double NaN = 0.0d / 0.0;翻译过来:NaN是...原创 2022-05-25 22:51:00 · 7831 阅读 · 1 评论 -
String的equals方法原理
一,前言:我们都知道String的equals方法,是用来比较两个字符串的内容是否是相等的,如果比较内存地址用的是==。那么String的equals方法是如何来比较两个字符串的内容是否是相等的呢?今天一起翻翻源码看看:·二,源码解析:public boolean equals(Object anObject) { //如果指定对象和当前对象的内存地址相等,则啥都不用说了,在内存中都是同一个对象了,直接返回tru...原创 2022-05-03 14:35:50 · 8998 阅读 · 1 评论 -
Java实现进制转换
一,16进制转换为二进制:/* 将16进制数转换为10进制(16进制数必须带0x) */String str="0x0002"; //16进制数//str.substring(2):把16进制的标识0x去掉;int signalAttribute = Integer.parseInt(str.substring(2).trim(), 16);/* 将10进制数转换为2进制字符串 */String binaryString = Integer.toBinaryString(signalA原创 2022-04-07 15:12:58 · 640 阅读 · 0 评论 -
线程执行任务以及线程死锁的代码示例
一,synchronized的用法:详见:synchronized的用法_Morning sunshine的博客-优快云博客二,线程执行任务:2.1,任务描述:有两个对象资源LockA和LockB,有一个任务task1,先获取LockA,利用LockA去执行一些业务逻辑,再获取LockB,利用LockB去执行一些业务逻辑。线程A去执行任务task1。2.1,代码示例:有两个对象资源LockA和LockB:...原创 2022-04-03 20:15:49 · 480 阅读 · 0 评论 -
Java的IO操作
1)文件 以及文件夹操作 : ---------------------------文件: ----------------------------- //1.1创建文件 File file=new File("d:\\123.txt"); //1.2判断文件是否存在 if(!file.exists()){ file.createNewFile(); } //1.3删除 file.d原创 2022-03-23 22:34:26 · 848 阅读 · 0 评论 -
Java多线程
一,概念:1.1)什么是主线程与子线程:Java程序运行时:jvm会自动创建主线程,执行main方法;在主线程中创建的线程是子线程;1.2)线程通过线程id和名称区分:1.1) Thread.currentThread().getId(); 1.2) Thread.currentThread().getName()二)多线程的创建方式:Java多线程的创建方式有三种:①,继承Thread类;②,实现Runnable接口;③,实现Callable接......原创 2022-01-29 10:07:39 · 689 阅读 · 0 评论 -
散列表_学习笔记
1)哈希表简介:散列表又称为哈希表,也被称为散列映射,映射,字典,关联数组等。散列表的查找、插入、删除速度都很快,目前大多数优秀的编程语言都提供了散列表实现。除此之外,因为哈希表的key不允许重复,所以散列表还非常适合用于防止重复。散列表存储元素的形式由键和值组成。2)散列表的结构:散列表这种数据结构由散列函数和数组组成;相比于数组和链表,散列表更为复杂一些些,它使用散列函数来确定元素的存储位置;在平均情况下,散列表的查找速度与数组一样快,而插入和删除的速度和链表一样快,因此原创 2021-12-18 17:13:50 · 1313 阅读 · 0 评论 -
2021-07-07
1,BigInteger与BigDecimal:这两个类可以进行任意长度、任意精度的数值运算;BigInteger——大整数,数值运算;BigDecimal——大浮点数,数值运算;数值运算用的是它们自己的方法,例如:add()和mutiply()。代码:public static void main(String[] args) { int num1 = 20; BigInteger bigInteger1 = BigInteger.valueOf(原创 2021-07-07 22:45:22 · 160 阅读 · 0 评论 -
线程同步的理解
线程同步的理解:我们可以在计算机上运行各种计算机软件程序。每一个运行的程序可能包括多个独立运行的线程(Thread)。线程(Thread)是一份独立运行的程序,有自己专用的运行栈。线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等。当多个线程同时读写同一份共享资源的时候,可能会引起冲突。这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一...原创 2020-04-22 22:09:51 · 538 阅读 · 0 评论 -
死锁产生的原因+如何避免死锁
死锁产生的原因+如何避免死锁:一,死锁产生的原因:1)什么是死锁? 所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局; 当进程处于这种僵持状态,而且无外力作用时,它们都将无法再向执行任务。举个例子来描述: 如果此时有一个线程A,按照先获取锁a、再获得锁b的顺序来获取锁,而此时同时还有一个线程B,按照先获取锁b、再获得锁a的顺序来获得锁。如下图所示:...原创 2020-03-30 22:23:45 · 10880 阅读 · 0 评论 -
进程间通信的几种方式
一,进程间通信的几种方式:1> 管道(pipe) 管道是一种半双工的通信方式,数据只能单向流动,而且只能在 具有父子关系 的进程间使用。 2> 有名管道 (namedpipe) 有名管道也是半双工的通信方式,但是它允许无亲缘关系的进程间的通信。3> 信号量(semaphore) 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。 它常作为一种锁机制,防止...原创 2020-03-30 22:17:08 · 383 阅读 · 0 评论 -
阻塞队列的实现原理+几种主要的阻塞队列
一,阻塞队列的实现原理:1)阻塞队列原理: 其实阻塞队列实现阻塞同步的方式很简单,使用的就是:lock锁+多个条件(condition)的阻塞控制。 使用BlockingQueue封装了根据condition条件阻塞线程的过程,使得我们不用去关心繁琐的await/signal操作了。 阻塞队列的最常使用的例子就是生产者消费者模式,也是各种实现生产者消费者模式方式中首选的方...原创 2020-03-03 23:21:10 · 3436 阅读 · 0 评论 -
Synchronized锁和Lock锁的区别
面试必问之synchronized与Lock的区别及底层实现一共8大区别;区别1:Synchronized 是Java的一个关键字,而Lock是java.util.concurrent.Locks 包下的一个接口;区别2:Synchronized 使用过后,会自动释放锁,而Lock需要手动上锁、手动释放锁。(在 finally 块中)区别3:Lock提供了更多的实现方法,而且 可响...原创 2020-01-07 22:45:32 · 15831 阅读 · 3 评论 -
什么是API
什么是API:阅读编程资料时经常会看到API这个名词,网上各种高大上的解释估计放倒了一批初学者。API(Application Programming Interface,应用程序编程接口),指的是一些预先定义好的函数/方法/接口。...原创 2020-05-01 15:19:16 · 217 阅读 · 0 评论 -
Java集合/容器
一,List:1.1)为什么Vector是线程安全的? Vector的所有成员方法都加了synchronize关键字,故,Vector的所有成员方法都是同步的,这样的话多个线程就不可能同时访问Vector中的数据,只能一个一个的访问,所以不会出现数据混乱的情况,所以是线程安全的。二,Set:三,Map:四,其他: 4.1. 集合...原创 2020-04-22 22:20:04 · 121 阅读 · 0 评论 -
HashMap的基本操作以及两种遍历方法
HashMap的基本操作以及两种遍历方法package com.qf2;import java.util.HashMap;import java.util.Map;/* * * HashMap的特点: * (1)存储键值对 * (2)无序; * (3)键不能重复、 (hashCode和equals);值可以重复 * * 存储结构:哈希表(数组+链表+红黑树) ...原创 2020-01-05 12:33:36 · 119 阅读 · 0 评论 -
Java8新特性——Optional类的判空使用
Java8新特性——Optional类的判空使用:BsLoginMsgDictPo bsLoginMsgDictPo = Optional.ofNullable(bsLoginMsgDictDao.qryOrgTypeAndOptrLvl(inParam)) .orElseThrow(() -> new BusiException("10110310004151627","抱歉,操作员工号" + inParam + "信息.原创 2020-09-07 13:51:34 · 444 阅读 · 0 评论 -
Java中的时间与日期
一,时间差:方式1)时间差:核心原理——System类中的有关时间的API示例:纳秒级别的时间差:// 当前系统的时间long nanoTimeStart = System.nanoTime();// ...许多代码过去之后...System.out.println("时间差:");System.out.println(System.nanoTime()-nanoTi...原创 2020-05-01 15:40:53 · 181 阅读 · 0 评论 -
JavaSE基础篇——对象与类
1.对象变量与对象一定要认识到: 一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。在Java 中,任何对象变量的值,其实都是 对存储在另外一个地方的一个对象的 一种引用而已。new 操作符的返回值也是一个引用。例如下列语句: Date deadline = new Date(); /* 解释:有两个部分。表达式new Date() 构造了一个D...原创 2020-04-22 21:56:35 · 247 阅读 · 0 评论 -
JavaSE基础——控制流程语句(条件语句+循环语句)
1)foreach语句:foreach 循环语句不能自动处理二维数组的每一个元素。它是按照行,也就是一维数组处理的,要想访问二维数组的所有元素,需要使用两个嵌套的循环,如下所示: for (doubleG row : a){ for (double value : row){ // ... } } ...原创 2020-04-22 21:08:16 · 277 阅读 · 0 评论 -
JavaSE基础——符号+表达式篇
1) Java中的转义字符: \b 退格 \t 制表 \n 换行 \r ...原创 2020-04-22 21:07:43 · 439 阅读 · 0 评论 -
JavaSE基础——数据类型+类型转换篇
1)8种基本数据类型: 4种整型 :byte(1字节)、short(2字节)、int(4字节)、long(8字节) 2种浮点类型: float(4字节)、doubble(8字节) 1种表示Unicode编码的字符单元的字符类型:char 1种表示真假值的boolean类型:boo...原创 2020-04-22 21:07:04 · 149 阅读 · 0 评论 -
JavaSE基础——方法篇
1)main()方法的作用: 运行已编译的程序时,Java虚拟机将从指定类中的main方法开始执行;也表明:为了代码能够执行,在类的源文件中必须包含一个main方法;main方法形式:public static void main(String args[]){...}2)String的join方法:如果需要把多个字符串放在一起,用一个定界符分割,可以...原创 2020-04-22 21:06:28 · 168 阅读 · 0 评论 -
JavaSE基础篇——格式规范+零散概念+编程规范+关键字
一,格式规范篇: 1.1. Java区分大小写; 1.2.类名写法: 类名以大写字母开头,如果名字由多个单词组成,则每个单词的第一个字母应该大写,这种方式称为驼峰命名法;二,零散概念篇: 2.1)多维数据 java实际上没有多维数组,只有一维数组,多维数组被解释为:”数组的数组“;三,编程规范篇:...原创 2020-04-22 20:55:02 · 165 阅读 · 0 评论