- 博客(24)
- 资源 (9)
- 收藏
- 关注
原创 Java多线程-并发工具类-CountDownLatch
CountDownLatch使用场景让某一条线程等待其他线程执行完毕之后再执行方法方法解释public CountDownLatch(int count)构造方法,参数传递线程数,表示等待线程数量public void await()让线程等待public void countDown()当前线程执行完毕案例三个孩子吃馄饨,妈妈等他们吃完馄饨之后再收拾碗筷MotherThread类package com.cmy.countdownlatc
2021-06-24 17:15:33 115
原创 Java多线程-并发工具类-Hashtable
HashtableHashMap是线程不安全的(多线程环境下可能会存在问题)为了保证数据的安全性,可以使用Hashtable,但是Hashtable的效率低为什么会效率低?Hashtable采用悲观锁synchronized的形式保证数据的安全性只要有线程访问,会将整张表全部锁起来,所以Hashtable的效率低下...
2021-06-24 17:14:24 141
原创 Java多线程-悲观锁和乐观锁
synchronized和CAS的区别相同的:在多线程的情况下,都可以保证共享数据的安全性不同点:synchronized总是从最坏的角度出发,认为每次获取数据的时候,别人都有可能修改,所以在每次操作共享数据时都会先上锁。(悲观锁)CAS是从乐观的角度触发,认为每次获取共享数据时别人都不会修改,所以不会上锁,只不过在修改共享数据时会检查一下,别人有没有修改过共享数据如果修改,则获取最新值,再重新操作(自旋)如果不修改,那么直接修改共享数据的值...
2021-06-24 17:13:34 70
原创 Java多线程-线程池-ThreadPoolExecutor
ThreadPoolExecutorThreadPoolExecutor构造方法的七个参数int corePoolSize核心线程的数量,不能小于0int maximumPoolSize最大线程数,不能小于0,最大数量 >= 核心线程数量long keepAliveTime空闲线程最大存活时间,不能小于0TimeUnit unit时间单位BlockingQueue<Runnable> workQueue任务队列,不能为nullThreadFa
2021-06-24 17:12:08 90
原创 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 490
原创 Java多线程-阻塞队列
阻塞队列阻塞队列阻塞队列的基本写法实现等待唤醒机制阻塞队列BlockingQueue的核心方法:put(anObject): 将参数放入队列,如果放不进去会阻塞take(): 取出第一个数据,取不到会阻塞常见的BlockingQueueArrayBlockingQueue:底层是数组,有界LinkedBlockingQueue:底层是链表,无界。但不是真正的无界,最大为int的最大值阻塞队列的基本写法package com.cmy.threaddemo11;imp
2021-06-23 15:42:59 201
原创 Java多线程-生产者和消费者
生产者和消费者生产者消费者生产者和消费者代码实现生产者1.判断桌子上是否有披萨,有则等待,无则生产2.把披萨放在桌子上3.叫醒等待的消费者开吃消费者1.判断桌子上是否有披萨2.如果没有则继续等待3.如果有则开吃4.吃完之后,桌子上的披萨就没有了,叫醒等待的生产者继续生产,披萨数量减1生产者和消费者代码实现生产者package com.cmy.threaddemo10;/** * @author 陈明勇 */public class Cooker extends
2021-06-23 15:40:45 73
原创 Java多线程-线程安全问题
线程安全问题线程安全问题案例案例改进原因分析卖票数据安全问题的解决同步代码块同步方法同步静态方法Lock锁死锁线程安全问题案例需求:某电影院目前正在上映国产大片,共有10张票,而它只有3个窗口售票,设计一个程序模拟该电影院卖票思路:① 定义一个Ticket实现Runnable接口,里面定义一个成员变量:private int ticketCount = 100;② 在Ticket类中重写run()方法实现卖票,代码步骤如下: A:判断如果票数大于0,卖票,并告知售票窗口名称 B:票
2021-06-23 15:39:01 377
原创 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 96
原创 Java多线程-线程的优先级
线程调度多线程的并发运行: 计算机中的CPU,在任意时刻只能执行一条机器指令,每个线程只有获得CPU的使用权才能执行代码。 各个线程轮流获得CPU的使用权,分别执行各自的代码线程的两种调度模型分时调度模型:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片抢占式调度模型:优先让优先级高的线程使用CPU,如果线程优先级相同,那么会随机选择一个,优先级高的线程获取CPU的时间片相对多一些java使用的是抢占式调度模型线程的优先级public final v
2021-06-23 15:36:30 125
原创 Java多线程-sleep线程休眠
线程休眠pulibc static void sleep(long time): 让线程按指定时间休眠, 单位为毫秒因为是静态方法,所以可以通过Thread.sleep()调用
2021-06-23 15:35:41 158
原创 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 661
原创 Java多线程-获取和设置线程名字
获取和设置线程名字获取线程的名字String getName(); 返回此线程的名字没有指定线程的名字时,线程是有默认名字的,格式:Thread-编号Thread类中设置线程的名字void setName(Strign name): 将此线程的名称更改为等于参数name通过构造方法也可以设置线程名称...
2021-06-23 15:33:26 290
原创 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 134 2
原创 SpringBoot学习笔记—SpringBoot整合MyBatis
SpringBoot整合MyBatisSpringBoot整合MyBatis实现步骤① 搭建SpringBoot工程② 引入MyBatis起步依赖,添加MySQL驱动③ 编写DataSource和MyBatis相关配置④ 定义表和实体类⑤ 编写dao和mapper文件/纯注解开发⑥ 测试SpringBoot整合MyBatis实现步骤① 搭建SpringBoot工程② 引入MyBatis起步依赖,添加MySQL驱动③ 编写DataSource和MyBatis相关配置④ 定义表和实体类⑤ 编写d
2021-06-19 11:32:43 93
原创 SpringBoot学习笔记—SpringBoot整合Redis
SpringBoot整合RedisSpringBoot整合Redis实现步骤①搭建SpringBoot工程② 引入redis起步依赖③ 配置redis相关属性④ 注入RedisTemplate模板和编写测试方法SpringBoot整合Redis实现步骤① 搭建SpringBoot工程② 引入redis起步依赖③ 配置redis相关属性④ 注入RedisTemplate模板和编写测试方法①搭建SpringBoot工程② 引入redis起步依赖勾上 NoSQL -> Spring
2021-06-19 11:29:58 146
原创 SpringBoot学习笔记—SpringBoot整合Junit
SpringBoot整合JunitSpringBoot整合Junit实现步骤① 搭建SpringBoot工程② 引入start-test起步依赖③编写测试类SpringBoot整合Junit实现步骤① 搭建SpringBoot工程② 引入starter-test起步依赖③ 编写测试类④ 添加测试相关注解@RunWith(Spring.Runner.class)@SpringBootTest(classes = 启动类.class)如果是springboot2.2.0版本
2021-06-19 11:26:13 156
原创 SpringBoot学习笔记—SpringBoot配置—profile
SpringBoot配置—profileprofileprofile的配置方式profile的激活方式profile使用SpringBoot开发应用时,通常一个项目会被安装到不同环境中,如:开发、测试、生产。其中数据库地址、服务器端口等配置都不一样,如果每次打包时都要修改配置,会很麻烦。profile的功能就是用来进行动态配置切换的profile的配置方式多profile文件方式主文件 application.yml开发模式配置文件 application-dev.ymlserve
2021-06-19 11:20:37 196
原创 SpringBoot学习笔记—SpringBoot配置—yaml文件
yaml文件的使用配置文件分类YAML对比properties和xml基本语法数据格式SpringBoot读取配置内容@Value注解获取Environment对象获取@ConfigurationProperties获取配置文件分类SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。properties:server.
2021-06-19 11:05:38 149
原创 SpringBoot学习笔记—SpringBoot快速入门
SpringBoot快速入门SpringBoot快速入门需求实现步骤① 创建Maven项目② 导入SpringBoot依赖③ 定义Controller类④ 编写引导类⑤ 启动测试注意事项快速构建SpringBoot工程SpringBoot快速入门需求搭建SpringBoot工程,定义HelloController类,实现一个hello()方法,返回字符串"Hello SpringBoot",即在页面上显示“Hello SpringBoot”字符串。实现步骤① 创建Maven项目② 导入Spri
2021-06-19 10:08:08 214
junit-4.11和hamcrest-core-1.3 的jar包
2021-02-26
mysql-connector-java.rar
2021-02-26
python实现的学生信息管理系统—GUI界面版
2020-06-07
python界面图书管理系统—GUI界面版
2020-06-07
python实现GUI界面的ATM系统
2020-06-07
python实现GUI界面购物商城
2020-06-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人