- 博客(22)
- 资源 (1)
- 收藏
- 关注
原创 Java编程如何写一个会导致死锁的程序?
第一次看到这个题目,觉得这是一个非常好的问题。很多人都知道死锁是怎么一回事儿:线程A和线程B相互等待对方持有的锁导致程序无限死循环下去。当然也仅限于此了,问一下怎么写一个死锁的程序就不知道了,这种情况说白了就是不懂什么是死锁,懂一个理论就完事儿了,实践中碰到死锁的问题基本上是看不出来的。真正理解什么是死锁,这个问题其实不难,几个步骤:1)两个线程里面共同持有两个Object对象:lock1...
2020-02-12 23:20:45 1371
原创 Spring RestTemplate方式实现HTTP请求
1. 简述RestTemplate是Spring用于同步client端的核心类,简化了与http服务的通信,并满足RestFul原则,程序代码可以给它提供URL,并提取结果。默认情况下,RestTemplate默认依赖jdk的HTTP连接工具。当然你也可以 通过setRequestFactory属性切换到不同的HTTP源,比如Apache HttpComponents、Netty和OkHtt...
2020-01-20 23:33:27 1063
原创 常用的并发工具类(3)Semaphore
用法:控制同时访问某个特定资源的线程数量,用在流量控制(数据库连接),信号量,证书颁发。样例:import java.sql.*;import java.util.Map;import java.util.Properties;import java.util.concurrent.Executor;/** * * <p> * 类说明:数据库连接的平庸实...
2020-01-13 22:20:40 240
原创 常用的并发工具类(2)CyclicBarrier
用法:让一组线程达到某个屏障,一起被阻塞,一直到组内最后一个线程达到屏障时,屏障开放,所有被阻塞的线程会继续运行CyclicBarrier(int parties)另一个构造函数:CyclicBarrier(int parties, Runnable barrierAction),屏障开放,barrierAction定义的任务会执行样例:import java.util.Map;...
2020-01-13 22:17:06 156
原创 常用的并发工具类(1)CountDownLatch
作用:是一组线程等待其他的线程完成工作以后在执行,加强版joinawait用来开启等待,countDown负责计数器的减一样例:package com.xiangxue.ch2.tools;import com.xiangxue.tools.SleepTools;import java.util.concurrent.CountDownLatch;/*...
2020-01-13 22:14:32 139
原创 调用yield() 、sleep()、wait()、notify()等方法对锁有何影响?
面试点线程在执行yield()以后,线程持有的锁是不释放的线程在执行sleep()方法被调用以后,线程持有的锁是不释放的线程在调用wait()和notify()方法之前,必须要先持有锁。调用了wait()方法以后,锁就会被释放,当wait方法返回的时候,线程会重新持有锁调动notify(),notifyAll()方法之前,必须要先持有锁,调用notify(),notifyAll()...
2020-01-06 21:56:41 431 1
原创 样例join()方法
join()方法常常可能作为面试点:如何保证线程A一定等到线程B执行完以后再执行?方法:线程A,执行了线程B的join()方法,线程A必须要等待B执行完成了以后,线程A才能继续自己的工作。也可以用countDownLatch实现线程的顺序执行。以下直接上样例代码:import com.xiangxue.tools.SleepTools;/** * 类说明:演示下join方法的...
2020-01-02 22:45:33 134
原创 线程间协作-使用wait/notify/notifyAll
轮询:难以保证及时性,资源开销很大,等待和通知wait() 对象上的方法notify/notifyAll 对象上的方法等待和通知的标准范式等待方:获取对象的锁; 循环里判断条件是否满足,不满足调用wait方法, 条件满足执行业务逻辑通知方: 获取对象的锁; 改变条件 通知所有等待在对象的线程 notify和notifyAll应该用谁...
2020-01-02 21:41:34 114
原创 Map 集合遍历的4种方法
Map 集合初始化时,指定集合初始值大小。说明:HashMap 使用 HashMap(int initialCapacity) 初始化。正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即 loaderfactor)默认为 0.75,如果暂时无法确定初始值大小,请设置为 16(即默认值)。反例:HashMap 需要放置 1024 个...
2019-12-29 22:32:59 116
原创 Java 8中处理集合的优雅姿势——Stream
Java 8中处理集合的优雅姿势——Stream在Java中,集合和数组是我们经常会用到的数据结构,需要经常对他们做增、删、改、查、聚合、统计、过滤等操作。相比之下,关系型数据库中也同样有这些操作,但是在Java 8之前,集合和数组的处理并不是很便捷。不过,这一问题在Java 8中得到了改善,Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。本文就...
2019-12-28 21:40:15 239
原创 Java 8 中的 Streams API 详解
为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于...
2019-12-28 21:35:45 93
原创 Java线程创建的常用方式
class SampleThread extends Thread { //重写run方法,start线程运行后,跑的就是run方法 public void run(){ //System.out.println(""); } public static void main(String[] args){ Thread ...
2019-12-14 15:29:46 99
原创 详解HHTPS-图解HTTP
最近看了图解HTTP一书,记录一下,面试常问的HTTPS。后续会不断修正。。。加油,小白。 在 HTTP 协议中有可能存在信息窃听或身份伪装等安全问题。使用HTTPS 通信机制可以有效地防止这些问题。以下就先聊HTTP的缺点然后看HTTPS如何克服这些缺点。1.HTTP 的缺点通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装 无法证明报文的...
2019-12-08 21:47:23 58122
原创 8步练成手倒立
8步练成手倒立下面开始:【度娘】想做一个如果你一直玩如何做倒立和前臂倒立站,是另一个有趣的反转尝试。如果你有你的心在上下颠倒,这里有八个动作来练习。他们会帮助你建立力量和稳定,这样你就不会再站在你的手上!倒立吗?8移动到你那里(度娘的意思是:想练成手倒立吗?8步就可以成功!)第一步:俯卧撑【度娘】它可能看起来像倒立都是平衡的,但为了能够把你的身体...
2019-12-08 20:49:51 303
原创 springBoot之PageHelper分页
项目中使用这个工具分页特别好,记录一下。。。1.pom.xml中引入依赖maven查询网址:https://mvnrepository.com/<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter --><dependency>...
2019-12-04 21:38:40 112
原创 IDEA通过Git提交代码并过滤iml等文件
直接上方法:file --》setting--》Editor--》File Types --》ActionScript - -》Ignore files and folders --》想要过滤掉的文件类型后缀。例如想要过滤掉后缀为.iml的文件,就添加 *.iml; 后续通过idea提交代码时,就自动过滤掉后缀为.iml的文件。...
2019-11-20 22:25:01 5812 1
原创 基于AQS的CountDownLatch源码分析与使用
CountDownLatch的作用很简单,就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执行完才可以。我们举一个例子来说明,在考试的时候,老师必须要等到所有人交了试卷才可以走。此时老师就相当于等待线程,而学生就好比是执行的线程。 注意:java中还有一个同步工具类叫做CyclicBarrier(多个线程间相互等待),他的作用和CountDownLatch类似。同样是等...
2019-11-19 23:12:16 114
原创 Idea设置类头注释和方法注释详细教程
1.类头注释打开file->setting->Editor->Fileand Code Templates->Includes->File Header/*** @task* @Author: JXS* @DateTime: ${DATE} ${TIME}* @Description: TODO* @Version v1.0*/最后点...
2019-11-19 22:37:33 645
原创 Mysql日期和字符串相互转换
date ----》char oracledate_format(date,'%Y-%m-%d %H:%i:%s'); to_char()char---》datestr_to_date('date',...
2019-11-19 21:47:18 180
原创 MySQL之concat以及group_concat的用法
本文中使用的例子均在下面的数据库表tt2下执行:一、concat()函数1、功能:将多个字符串连接成一个字符串。2、语法:concat(str1, str2,...)返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。所以使用时最好与ifnull函数结合使用IFNULL(v1,v2):其中:如果 v1 不为 NULL,则 IFNULL...
2019-11-18 22:29:33 5090
原创 关于显示锁与AQS学习整理
最近一直在学习各种锁的相关知识,这篇文章作为个人的学习整理,有优秀博客,也有学习视频也有参考书籍,记录,好记性不如烂笔头,加油我也可以很厉害的。遇到锁的东西会不断更新在此。。。显式锁说道显示锁,首先得介绍Lock接口Lock接口和核心方法void lock():获取锁,若没获取到锁则会阻塞。 void unlock():释放锁。 boolean tryLock():尝试去...
2019-11-05 22:11:45 165
原创 Oracle与MySQL的区别
(1) 对事务的提交 MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮(2) 分页查询 MySQL是直接在SQL语句中写"select... from ...where...limit x, y",有limit就可以实现分页;而Oracle则是需要用到伪列ROWNUM和嵌套查询。Oracle...
2019-10-24 20:54:35 105
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人