Java 进阶
文章平均质量分 72
Java 进阶
A逍遥人世欢
手握日月摘星辰,世间无我这般人。
脚踏阴阳定乾坤,荒古至今我为尊。
展开
-
Java 进阶(18) 内部类
*** 接⼝中⽅法默认为public*/原创 2023-04-18 13:04:57 · 58 阅读 · 0 评论 -
Java 进阶(17) 注解
Override :检测被该注解标注的⽅法是否是继承⾃⽗类(接⼝)的@Deprecated:该注解标注的内容,表示已过时@SuppressWarnings:压制警告⼀般传递参数all @SuppressWarnings("all")@Override元注解public @interface 注解名称{属性列表;注解本质上就是⼀个接⼝,该接⼝默认继承Annotation接⼝接口中的抽象方法1. 属性的返回值类型有下列取值基本数据类型String枚举注解以上类型的数组。原创 2023-04-17 17:26:34 · 120 阅读 · 0 评论 -
Java 进阶(16)枚举
枚举类型是Java 5中新增特性的⼀部分,它是⼀种特殊的数据类型,之所以特殊是因为它既是⼀种类(class)类型却⼜⽐类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。枚举在各个语⾔当中都有着⼴泛的应⽤,通常⽤来表示诸如颜⾊、⽅式、类别、状态等等数⽬有限、形式离散、表达⼜极为明确的量。Java从JDK5开始,引⼊了对枚举的⽀持。在枚举出现之前,如果想要表示⼀组特定的离散值,往往使⽤⼀些常量。(1)代码可读性差、易⽤性低。原创 2023-04-17 08:22:24 · 78 阅读 · 0 评论 -
Java 进阶(15)线程安全集合
它是线程安全的无序的集合,可以将它理解成线程安全的HashSet。有意思的是,CopyOnWriteArraySet和HashSet虽然都继承于共同的父类AbstractSet;但是,HashSet是通过“散列表(HashMap)”实现的,而CopyOnWriteArraySet则是通过“动态数组(CopyOnWriteArrayList)”实现的,并不是散列表。原创 2023-04-16 13:59:55 · 709 阅读 · 0 评论 -
Java 进阶(14) 线程池
我们使⽤线程的时候就去创建⼀个线程,这样实现起来⾮常简便,但是就会有⼀个问题:如果并发的线程数量很多,并且每个线程都是执⾏⼀个时间很短的任务就结束了,这样频繁创建线程就会⼤⼤降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有⼀种办法使得线程可以复⽤,就是执⾏完⼀个任务,并不被销毁,⽽是可以继续执⾏其他的任务?在Java中可以通过线程池来达到这样的效果。线程池:其实就是⼀个容纳多个线程的容器,其中的线程可以反复使⽤,省去了频繁创建线程对象的操作,⽆需反复创建线程⽽消耗过多资源。原创 2023-04-16 13:43:10 · 357 阅读 · 0 评论 -
Java 进阶(13) 死锁
多个线程同时被阻塞,它们中的⼀个或者全部都在等待某个资源被释放。由于线程被⽆限期地阻塞,因此程序不可能正常终⽌。如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对⽅的资源,所以这两个线程就会互相等待⽽进⼊死锁状态。线程 A 通过 synchronized (resource1) 获得 resource1 的监视器锁,然后通过Thread.sleep(1000);让线程 A 休眠 1s 为的是让线程 B 得到执⾏然后获取到 resource2 的监视器锁。原创 2023-04-16 13:38:43 · 168 阅读 · 0 评论 -
Java 进阶(12) 线程通信
如果能获取锁,线程就从 WAITING 状态变成 RUNNABLE 状态;否则,从 wait set 出来,⼜进⼊ entry set,线程就从 WAITING 状态⼜变成 BLOCKED 状态调⽤wait和notify⽅法需要注意的细节1. wait⽅法与notify⽅法必须要由同⼀个锁对象调⽤。因为:对应的锁对象可以通过notify唤醒使⽤同⼀个锁对象调⽤的wait⽅法后的线程。2. wait⽅法与notify⽅法是属于Object类的⽅法的。原创 2023-04-16 13:38:13 · 100 阅读 · 0 评论 -
Java 进阶(11) 线程安全
当多线程并发访问临界资源时,如果破坏原⼦操作,可能会造成数据不⼀致。共享资源(同⼀对象),⼀次仅允许⼀个线程使⽤,才可保证其正确性。不可分割的多步操作,被视作⼀个整体,其顺序和步骤不可打乱或缺省。线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,⽽⽆写操作,⼀般来说,这个全局变量是线程安全的;若有多个线程同时执⾏写操作,⼀般都需要考虑线程同步,否则的话就可能影响线程安全。为了保证每个线程都能正常执⾏原⼦操作,Java引⼊了线程同步机制。那么怎么去使⽤呢?原创 2023-04-16 13:34:56 · 347 阅读 · 0 评论 -
Java 进阶(10) 线程生命周期
,线程即进⼊就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执⾏,并不是说执⾏了 t.start() 此线程⽴即就会执⾏;处于运⾏状态中的线程由于某种原因,暂时放弃对CPU的使⽤权,停⽌执⾏,此时进⼊阻塞状态,直到其进⼊到就绪状态,才有机会再次被CPU调⽤以进⼊到运⾏状态。当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执⾏,即进⼊到运⾏状态。注:就绪状态是进⼊到运⾏状态的唯⼀⼊⼝,也就是说,线程要想进⼊运⾏状态执⾏,⾸先必须处于就绪状态中;多线程状态之间的转换。原创 2023-04-16 13:31:28 · 112 阅读 · 0 评论 -
Java 进阶(9) 守护线程
⽤户线程(前台线程)、守护线程(后台线程)如果程序中所有前台线程都执⾏完毕了,后台线程会⾃动结束垃圾回收器线程属于守护线程。原创 2023-04-16 13:29:28 · 78 阅读 · 0 评论 -
Java 进阶(8) 线程常用方法
方法名说明当前线程主动休眠 millis 毫秒。当前线程主动放弃时间⽚,回到就绪状态,竞争下⼀次时间⽚。允许其他线程加⼊到当前线程中。线程优先级为1-10,默认为5,优先级越⾼,表示获取CPU机会越多。设置为守护线程线程有两类:⽤户线程(前台线程)、守护线程(后台线程)原创 2023-04-16 13:27:27 · 301 阅读 · 0 评论 -
Java 进阶(7) 创建线程
1. 定义Thread类的⼦类,并重写该类的run()⽅法,该run()⽅法的⽅法体就代表了线程需要完成的任务,因此把run()⽅法称为线程执⾏体。2. 创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。1. 定义Runnable接⼝的实现类,并重写该接⼝的run()⽅法,该run()⽅法的⽅法体同样是该线程的线程执⾏体。3. 增加程序的健壮性,实现解耦操作,代码可以被多个线程共享,代码和线程独⽴。原创 2023-04-16 13:18:30 · 137 阅读 · 0 评论 -
Java 进阶(6)并发、并行、进程、线程概念
并发:指两个或多个事件在同⼀个时间段内发⽣。并行:指两个或多个事件在同⼀时刻发⽣(同时发⽣)。在操作系统中,安装了多个程序,并⾏指的是在⼀段时间内宏观上有多个程序同时运行,这在单 CPU系统中,每⼀时刻只能有⼀道程序执行,即微观上这些程序是分时的交替运⾏,只不过是给⼈的感觉是同时运⾏,那是因为分时交替运⾏的时间是非常短的。而在多个 CPU 系统中,则这些可以并发执⾏的程序便可以分配到多个处理器上(CPU),实现多任务并行执行,即利⽤每个处理器来处理⼀个可以并发执⾏的程序,这样多个程序便可以同时执行。原创 2023-04-16 13:50:30 · 83 阅读 · 0 评论 -
Java 进阶(5) Java IO流
⽣活中,你肯定经历过这样的场景。当你编辑⼀个⽂本⽂件,忘记了ctrl+s ,可能⽂件就⽩⽩编辑了。当你电脑上插⼊⼀个U盘,可以把⼀个视频,拷⻉到你的电脑硬盘⾥。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。我们把这种数据的传输,可以看做是⼀种数据的流动,按照流动的⽅向,以内存为基准,分为输⼊input 和输出output ,即流向内存是输⼊流,流出内存的输出流。Java中I/O操作主要是指使⽤java.io包下的内容,进⾏输⼊、输出操作。输⼊也叫做读取数据,输出也叫做作写出数据。原创 2023-04-15 15:24:46 · 371 阅读 · 0 评论 -
Java 进阶(4) 集合
特点:有序、有下标、元素可以重复。List作为Collection集合的⼦接⼝,不但继承了Collection接⼝中的全部⽅法,⽽且还增加了⼀些根据元素索引来操作集合的特有⽅法,如下:public void add(int index, E element) : 将指定的元素,添加到该集合中的指定位置上。public E get(int index) :返回集合中指定位置的元素。public E remove(int index) : 移除列表中指定位置的元素, 返回的是被移除的元素。原创 2023-04-15 13:50:18 · 223 阅读 · 0 评论 -
Java 进阶(3) 泛型
修饰符 class 类名<代表泛型的变量> { }什么时候确定泛型?在创建对象的时候确定泛型//作⽤在类上的泛型:当数据类型不确定的时候,可以⼀个泛型,通过创建对象传递过来⼀个类型,来确定T的类型public static <M> void test(M m){//静态⽅法上要单独声明,它不能使⽤类上⾯的声明的泛型,调⽤静态⽅法的时候,确定类型System.out.println("检测到了静态⽅法上的泛型:"+m);return x;this.x = x;return y;原创 2023-04-15 13:05:00 · 154 阅读 · 0 评论 -
Java 进阶(2) Collection集合
集合是java中提供的⼀种容器,可以⽤来存储多个数据。存储⼀组相同数据类型的数据结构。局限:定长动态存放多个对象。集合的⼤⼩随着存储的数据量⽽改变。0-多个数据存储类的实例。基本数据类型--->包装类对象。原创 2023-04-15 12:57:17 · 410 阅读 · 0 评论 -
Java 进阶(1) 常用类
Java提供了两个类型系统,基本类型与引⽤类型,使⽤基本类型在于效率,然⽽很多情况,会创建对象使⽤,因为对象可以做更多的功能,如果想要我们的基本类型像对象⼀样操作,就可以使⽤基本类型对应的包装类,如下:byte--->Byteshort--->Shortint--->Integerlong-->Longchar-->Characterfloat-->Floatdouble-->Doubleboolean--->Boolean基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:装箱:从基本类原创 2023-04-09 15:04:12 · 819 阅读 · 0 评论 -
BigDecimal 类详解
商业计算使用BigDecimal。尽量使用参数类型为String的构造函数。BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值。原创 2023-04-09 14:41:31 · 1029 阅读 · 0 评论