![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java学习
程序员陈_明勇
一个热爱技术,喜欢专研技术的程序员。成功的路上并不拥挤,有没有兴趣结个伴?
展开
-
spring boot 使用 RestTemplate 发送携带 headers 参数的GET请求
spring boot 使用 RestTemplate 发送携带 headers 参数的GET请求原创 2021-08-17 18:33:34 · 2076 阅读 · 0 评论 -
Centos8 系统下安装jdk1.8
Centos8 系统下安装jdk1.8原创 2021-06-26 23:58:05 · 461 阅读 · 2 评论 -
Java多线程-并发工具类-Semaphore
Java多线程-并发工具类-Semaphore原创 2021-06-24 17:16:26 · 125 阅读 · 0 评论 -
Java多线程-并发工具类-CountDownLatch
CountDownLatch使用场景让某一条线程等待其他线程执行完毕之后再执行方法方法解释public CountDownLatch(int count)构造方法,参数传递线程数,表示等待线程数量public void await()让线程等待public void countDown()当前线程执行完毕案例三个孩子吃馄饨,妈妈等他们吃完馄饨之后再收拾碗筷MotherThread类package com.cmy.countdownlatc原创 2021-06-24 17:15:33 · 108 阅读 · 0 评论 -
Java多线程-并发工具类-Hashtable
HashtableHashMap是线程不安全的(多线程环境下可能会存在问题)为了保证数据的安全性,可以使用Hashtable,但是Hashtable的效率低为什么会效率低?Hashtable采用悲观锁synchronized的形式保证数据的安全性只要有线程访问,会将整张表全部锁起来,所以Hashtable的效率低下...原创 2021-06-24 17:14:24 · 133 阅读 · 0 评论 -
Java多线程-悲观锁和乐观锁
synchronized和CAS的区别相同的:在多线程的情况下,都可以保证共享数据的安全性不同点:synchronized总是从最坏的角度出发,认为每次获取数据的时候,别人都有可能修改,所以在每次操作共享数据时都会先上锁。(悲观锁)CAS是从乐观的角度触发,认为每次获取共享数据时别人都不会修改,所以不会上锁,只不过在修改共享数据时会检查一下,别人有没有修改过共享数据如果修改,则获取最新值,再重新操作(自旋)如果不修改,那么直接修改共享数据的值...原创 2021-06-24 17:13:34 · 64 阅读 · 0 评论 -
Java多线程-线程池-ThreadPoolExecutor
ThreadPoolExecutorThreadPoolExecutor构造方法的七个参数int corePoolSize核心线程的数量,不能小于0int maximumPoolSize最大线程数,不能小于0,最大数量 >= 核心线程数量long keepAliveTime空闲线程最大存活时间,不能小于0TimeUnit unit时间单位BlockingQueue<Runnable> workQueue任务队列,不能为nullThreadFa原创 2021-06-24 17:12:08 · 80 阅读 · 0 评论 -
Java多线程-线程池-Executors默认线程池
Executors默认线程池代码实现1.创建空的连接池创建Executors中的静态方法2.需要执行任务时,创建线程对象。任务执行完毕,线程对象归还给池子submit方法,有线程对象则直接拿来用,没有则自动创建线程对象3.所有任务执行完毕,关闭连接池shutdown方法static ExecutorService newCachedThreadPool()创建一个默认的线程池package com.cmy.myThreadpool;import java.util.c原创 2021-06-24 17:11:01 · 462 阅读 · 0 评论 -
Java多线程-线程状态
线程状态虚拟机中线程的六种状态原创 2021-06-23 15:46:37 · 53 阅读 · 0 评论 -
Java多线程-阻塞队列
阻塞队列阻塞队列阻塞队列的基本写法实现等待唤醒机制阻塞队列BlockingQueue的核心方法:put(anObject): 将参数放入队列,如果放不进去会阻塞take(): 取出第一个数据,取不到会阻塞常见的BlockingQueueArrayBlockingQueue:底层是数组,有界LinkedBlockingQueue:底层是链表,无界。但不是真正的无界,最大为int的最大值阻塞队列的基本写法package com.cmy.threaddemo11;imp原创 2021-06-23 15:42:59 · 125 阅读 · 0 评论 -
Java多线程-生产者和消费者
生产者和消费者生产者消费者生产者和消费者代码实现生产者1.判断桌子上是否有披萨,有则等待,无则生产2.把披萨放在桌子上3.叫醒等待的消费者开吃消费者1.判断桌子上是否有披萨2.如果没有则继续等待3.如果有则开吃4.吃完之后,桌子上的披萨就没有了,叫醒等待的生产者继续生产,披萨数量减1生产者和消费者代码实现生产者package com.cmy.threaddemo10;/** * @author 陈明勇 */public class Cooker extends原创 2021-06-23 15:40:45 · 67 阅读 · 0 评论 -
Java多线程-线程安全问题
线程安全问题线程安全问题案例案例改进原因分析卖票数据安全问题的解决同步代码块同步方法同步静态方法Lock锁死锁线程安全问题案例需求:某电影院目前正在上映国产大片,共有10张票,而它只有3个窗口售票,设计一个程序模拟该电影院卖票思路:① 定义一个Ticket实现Runnable接口,里面定义一个成员变量:private int ticketCount = 100;② 在Ticket类中重写run()方法实现卖票,代码步骤如下: A:判断如果票数大于0,卖票,并告知售票窗口名称 B:票原创 2021-06-23 15:39:01 · 167 阅读 · 0 评论 -
Java多线程-守护线程
后台线程/守护线程public final void setDaemon(boolean on): 设置为守护线程线程类1package com.cmy.threaddemo8;/** * @author 陈明勇 */public class MyThread extends Thread { @Override public void run() { for (int i = 0; i < 10; i++) { System原创 2021-06-23 15:37:31 · 83 阅读 · 0 评论 -
Java多线程-线程的优先级
线程调度多线程的并发运行: 计算机中的CPU,在任意时刻只能执行一条机器指令,每个线程只有获得CPU的使用权才能执行代码。 各个线程轮流获得CPU的使用权,分别执行各自的代码线程的两种调度模型分时调度模型:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片抢占式调度模型:优先让优先级高的线程使用CPU,如果线程优先级相同,那么会随机选择一个,优先级高的线程获取CPU的时间片相对多一些java使用的是抢占式调度模型线程的优先级public final v原创 2021-06-23 15:36:30 · 119 阅读 · 0 评论 -
Java多线程-sleep线程休眠
线程休眠pulibc static void sleep(long time): 让线程按指定时间休眠, 单位为毫秒因为是静态方法,所以可以通过Thread.sleep()调用原创 2021-06-23 15:35:41 · 145 阅读 · 0 评论 -
Java多线程-获取线程对象
获取当前线程的对象public static Thread currentThread();返回当前正在执行的线程的引用,此方法一般用于使用实现Runnable创建线程的方式去获取线程的名字,因为是静态方法,所以可以通过Thread.currentThread()去调用package com.cmy.threaddemo2;/** * @author 陈明勇 */public class MyRunnable implements Runnable { @Override原创 2021-06-23 15:34:49 · 646 阅读 · 0 评论 -
Java多线程-获取和设置线程名字
获取和设置线程名字获取线程的名字String getName(); 返回此线程的名字没有指定线程的名字时,线程是有默认名字的,格式:Thread-编号Thread类中设置线程的名字void setName(Strign name): 将此线程的名称更改为等于参数name通过构造方法也可以设置线程名称...原创 2021-06-23 15:33:26 · 277 阅读 · 0 评论 -
Java多线程实现线程的三种方式及其对比
java多线程实现线程的三种方式及其对比方式1:继承Thread类步骤思考方式2:实现Runnable接口步骤方式3:Callable和Future步骤三种方式对比方式1:继承Thread类步骤定义一个MyThread类,继承Thread类在MyThread类中重写run方法创建MyThread类的对象启动线程MyThred类package com.cmy.threaddemo;/** * @author 陈明勇 */public class MyThread extends原创 2021-06-23 15:31:45 · 122 阅读 · 2 评论 -
Java Stream流
Stream流Stream流的三类方法Stream流的获取方法Stream流的中间操作常用方法filter方法limit方法skip方法concat方法distinct方法Stream流的终结操作常用方法forEach方法count方法Stream流的收集方法Stream流案例练习Stream流的三类方法获取Stream流创建一条流水线,并把数据放到流水线上准备操作中间方法流水线上的操作可以执行多个操作终结方法流水线的最后一个操作一个Stream流只能有一个终结方法Str原创 2021-03-04 14:08:01 · 368 阅读 · 8 评论 -
Java 可变参数和创建不可变集合
可变参数和创建不可变集合可变参数案例创建不可变集合可变参数可变参数:形参的个数是可以变化的格式:修饰符 返回值类型 方法名(数据类型… 变量名) { }范例:public static int sun(int… a) { }变量是一个数组案例需求:定义一个方法求 N 个数的和public class MyMap2 { public static void main(String[] args) { int sum = getSum(1, 2, 3, 4, 5, 6); Syst原创 2021-03-03 17:41:41 · 334 阅读 · 4 评论 -
Java Map集合的使用
Map集合概述Map集合分类单列集合单列集合一次存储一个元素双列集合双列集合一次添加两个元素(一对数据)Map集合总结Interface Map<K, V> K:键的数据类型,V:值的数据类型键不能重复,值可以重复键和值一一对应,每一个键只能找到自己对应的值(键+值)这个整体 称为 “键值对”,或 “键值对” 对象,在 Java 中称为 “Entry” 对象举例说明:学生的学号和姓名20001 -> 张三2002 -> 李四2003原创 2021-03-03 17:08:11 · 210 阅读 · 10 评论 -
Java JDBC自定义封装工具类
封装JDBC工具类封装JDBC工具类的作用可以优化代码,提高开发效率步骤① 创建配置文件(config.properties),用于存放注册驱动和连接数据库时所需要的参数值② 自定义一个类(JDBCUtils.java)③ 实现构造私有方法 private JDBCUtils(){}④ 声明所需要的配置变量private static String driverClass;private static String url;private static String username;p原创 2021-02-27 02:13:27 · 300 阅读 · 2 评论 -
Java JDBC连接MySQL数据库和功能类详解
JDBC快速入门① 导入mysql-connector-java.jar包② 注册驱动③ 获取数据库连接④ 获取执行者对象⑤ 执行 sql 语句,并接收结果⑥ 处理结果⑦ 释放资源代码演示① 导入mysql-connector-java.jar包在工程里创建一个 lib 文件夹,将jar包文件放到里面去,然后选中jar包右键点击 Add as Library...然后点击 OK② 注册驱动Class.forName("com.mysql.jdbc.driver");原创 2021-02-26 07:11:35 · 293 阅读 · 0 评论