JAVASE进阶知识
存放JAVASE进阶知识的内容
一个虽然帅,但是菜的cxy
这个作者很懒,什么都没留下…
展开
-
join方法的使用
一:join()方法的使用1.1:引出join方法的使用场景主线程创建并启动子线程,如果子线程需要进行大量耗时的操作,那么主线程会早于子线程结束之前结束public class Demo { public static void main(String[] args) { new Thread(() -> { try { System.out.println(Thread.currentThread().getNam原创 2020-08-04 22:52:21 · 671 阅读 · 0 评论 -
线程的状态
一:线程的状态线程的状态,在Thread类中的State枚举中public enum State { NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED;}1.1:验证: NEW, RUNNABLE, TERMINATED状态1、业务类public class MyThread extends Thread{ public MyThread(){ System.out.print原创 2020-08-02 23:11:46 · 99 阅读 · 0 评论 -
lock接口的基本使用(一)
一:lock接口的基本使用1.1:使用synchronized关键字实现wait/notify机制1、业务类public class MyService { private Object lock = new Object(); public void awaitMethod(){ try { synchronized (lock){ System.out.println("awaitMethod() star原创 2020-08-02 21:20:39 · 403 阅读 · 0 评论 -
多线程中的单例模式
第一种写法:饿汉式//饿汉式public class SingleObject1 { private static final SingleObject1 instance = new SingleObject1(); private SingleObject1(){ } public static SingleObject1 getInstance(){ return instance; }}第二种写法:懒汉式1、迭代一://懒原创 2020-07-29 21:11:21 · 330 阅读 · 0 评论 -
wait/notify详解(二)
一:wait/notify详解1.1:wait方法,立即释放锁public class Demo { private static Object lock = new Object(); public static void main(String[] args) { new Thread(() -> { try { synchronized (lock){ Sys原创 2020-07-28 08:08:57 · 141 阅读 · 0 评论 -
线程间通信(一)
一:线程间的通信1.1:wait/notify机制的原理1.wait方法的作用是使当前执行的wait方法的线程等待,并释放锁,直到接到通知或被中断为止2.拥有相同锁的线程才可以实现wait/notify机制3.wait和notify方法必须在同步中使用,否则会发生IllegalMonotorStateException异常4.notify方法是通知等待该锁的其他线程!,所以前提是wait方法和notify方法使用的是同一把锁5.notify方法执行后,并不会立即释放锁,需要执行完notify所在原创 2020-07-28 07:47:44 · 138 阅读 · 0 评论 -
java内存模型
原创 2020-07-22 22:09:42 · 66 阅读 · 0 评论 -
多线程中的单例模式
第一种写法//饿汉式public class SingleObject1 { private static final SingleObject1 instance = new SingleObject1(); private SingleObject1(){ } public static SingleObject1 getInstance(){ return instance; }}第二种写法//懒汉式: 在多线程环境下不安全,原创 2020-07-22 08:06:23 · 154 阅读 · 0 评论 -
简单线程池
public class SimpleThreadPool { private final int size; private final static int DEFAULT_SIZE = 10; private static volatile int seq = 0; private final static String THREAD_PREFIX = "SIMPLE_THREAD_POOL-"; private final static Thread原创 2020-07-22 07:12:38 · 105 阅读 · 0 评论 -
线程死锁
线程的死锁线程死锁是一个经典的多线程问题,因为不同的线程,都在等待根本不可能被释放的锁,从而导致所有的任务都无法继续完成。死锁的例子public class DealThread implements Runnable { public String username; public Object lock1 = new Object(); public Object lock2 = new Object(); public void setUsername原创 2020-07-20 21:44:58 · 104 阅读 · 0 评论 -
线程的停止(二)
停止线程在java语言中并不像break语句那么干脆,说停就立马停,需要一点技巧性的处理!停止线程的三种方式1.使用退出标志使线程正常退出2.使用stop()方法强行终止线程,但是不推荐,因为他是废弃的方法,使用它可能会发生不可预料的结果3.使用interrupt()方法中断线程一:停止不了的线程public class ThreadDemo{ public static void main(String[] args) throws InterruptedException {原创 2020-07-16 22:19:17 · 134 阅读 · 0 评论 -
多线程的基础知识(一)
一:进程和线程的概念进程:是正在运行的程序是系统进行资源分配和调用的独立单位每一个进程都有它自己的内存空间和系统资源线程:是进程中的单个顺序控制流,是一条执行路径单线程:一个进程如果只有一条执行路径,则称为单线程程序(记事本)多线程:一个进程如果有多条执行路径,则称为多线程程序(360扫描)单线程例子:记事本注:记事本就是一个单线程的程序,当我编辑文件后,我打开页面设置,然后反过来想到编辑区来编辑文字可是我怎么点也没用,必须将页面设置窗口给关掉,才可以继续在编辑区编辑文字原创 2020-07-15 07:45:18 · 144 阅读 · 0 评论 -
泛型总结
泛型总结前言其实在去年我也写过一篇关于泛型的文章,里面的内容基本上把有关泛型的知识点也都涉及到了,那我为什么还要写关于泛型的知识了,由于现在用java8比较多,函数式接口也很多里面结合泛型的场景几乎很常见了,看见jdk源码设计的这么好,而自己从来没有想过使用去设计一些类/接口/方法什么的,忍不住想稍微深入一下下,巩固一下基础。1.走进泛型2.手撕泛型方法3.手撕泛型擦除和泛型数组来自:虽然帅,但是菜的cxy...原创 2020-06-21 15:24:40 · 114 阅读 · 1 评论 -
泛型方法
泛型方法1、引出泛型方法需求:将Object[]中的元素,全部添加到Collection集合中public class Demo { public static void main(String[] args) { String[] arr = {"hello","world"}; List<Object> list = new ArrayList<>(); //如果将参数类型Object改为String,Integer..等, 调用原创 2020-06-21 15:08:52 · 179 阅读 · 0 评论 -
泛型擦除和泛型数组
泛型擦除:泛型只是在 编译期 保证对象类型相同的技术,编译后就被擦除了。真正在代码的运行期,jvm会擦除泛型的存在。(所以也可以不反编译,使用反射来验证泛型擦除!)泛型擦除无限制类型擦除有限制类型擦除泛型方法的类型擦除桥接方法1、无限制类型擦除//无限制类型擦除public class Orange<T>{ private T color; public void setColor(T color) { this.color =原创 2020-06-21 15:08:12 · 692 阅读 · 0 评论 -
java8日期时间API
java8日期时间API为什么要使用java8的日期时间API,因为以前用的Date,Calendar都是线程不安全的!演示线程不安全public class TestSimpleDateFormat { /** * 使用之前的时间API,会发生线程不安全的问题 * java.util.concurrent.ExecutionException: java.lang.NumberFormatException: multiple points * @t原创 2020-06-16 22:03:08 · 132 阅读 · 0 评论 -
stream流(三)
Stream流的操作1.什么是Stream它是一个数据渠道,用于操作数据源(集合,数组等)所生成的元素序列,集合讲的是数据,Stream讲的是计算!使用Stream API对集合数据进行操作,就类似使用SQL执行的数据库查询!2.为什么要使用Stream API实际开发中,项目中多数数据源来自Mysql,Oracel关系型数据库,但现在还有来自Nosql的数据:如MongoDB,Redis,而这些NoSQL的数据就需要java层面去处理3.Stream的操作三个步骤1.创建Stre原创 2020-06-06 23:00:06 · 218 阅读 · 0 评论 -
方法引用&构造器引用&数组引用(二)
方法引用&构造器引用&数组引用方法引用package cn.itcast.lambda;import org.junit.Test;import java.io.PrintStream;import java.util.Comparator;import java.util.function.BiPredicate;import java.util.function.Consumer;import java.util.function.Function;import j原创 2020-06-06 22:37:41 · 132 阅读 · 0 评论 -
lambda入门&函数式接口(一)
java8新特性大纲lambda表达式入门package com.baidu;import java.util.function.Consumer;/** * lambda表达式的使用: * 1.举例: Comparator<Interger> c = (o1,o2) -> Integer.compare(o1,o2); * 2.格式 * -> :lambda操作符 或 箭头操作符 * ->左边: lambda参数列表(其实就是抽象方原创 2020-06-06 22:28:08 · 136 阅读 · 0 评论 -
注解
我们为什么要学习注解?它可以替代配置文件注解的使用: 分如下三步来学习!!! 一:定义注解类(一般都是框架干的) 二:使用注解 (开发人员!) 三:读取注解 (一般都是框架干的:因为注解最终是代替配置文件,而配置文件最终是要被读取的!) 注:注解也是个类,所有的注解都是Annotation的实现类 一:定义注解类1.1 定义注解类,那么怎么定义...原创 2020-02-29 13:11:11 · 129 阅读 · 0 评论 -
反射基本的概念和用法1
反射的概念1.java反射机制是在运行状态中,对于任何一个类,都能知道这个类的所有属性和方法对于任何一个对象,都能调用他的任意一个方法和属性,这种动态获取信息以及动态调用对象调用对象的方法的功能称为java语言的反射机制2.要解剖一个类,必须先要获取该类的字节码文件对象而解剖使用的就是Class类中的方法,所以先要获取到每个字节码文件对应的Class类型的对象对上面的总结简单一点就是: 通过一个类...原创 2018-07-03 21:50:51 · 377 阅读 · 0 评论