JAVA
1354肉盾
这个作者很懒,什么都没留下…
展开
-
Java编程如何写一个会导致死锁的程序?
第一次看到这个题目,觉得这是一个非常好的问题。很多人都知道死锁是怎么一回事儿:线程A和线程B相互等待对方持有的锁导致程序无限死循环下去。当然也仅限于此了,问一下怎么写一个死锁的程序就不知道了,这种情况说白了就是不懂什么是死锁,懂一个理论就完事儿了,实践中碰到死锁的问题基本上是看不出来的。真正理解什么是死锁,这个问题其实不难,几个步骤:1)两个线程里面共同持有两个Object对象:lock1...原创 2020-02-12 23:20:45 · 1351 阅读 · 0 评论 -
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 · 1046 阅读 · 0 评论 -
常用的并发工具类(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 · 226 阅读 · 0 评论 -
常用的并发工具类(2)CyclicBarrier
用法:让一组线程达到某个屏障,一起被阻塞,一直到组内最后一个线程达到屏障时,屏障开放,所有被阻塞的线程会继续运行CyclicBarrier(int parties)另一个构造函数:CyclicBarrier(int parties, Runnable barrierAction),屏障开放,barrierAction定义的任务会执行样例:import java.util.Map;...原创 2020-01-13 22:17:06 · 140 阅读 · 0 评论 -
常用的并发工具类(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 · 122 阅读 · 0 评论 -
调用yield() 、sleep()、wait()、notify()等方法对锁有何影响?
面试点线程在执行yield()以后,线程持有的锁是不释放的线程在执行sleep()方法被调用以后,线程持有的锁是不释放的线程在调用wait()和notify()方法之前,必须要先持有锁。调用了wait()方法以后,锁就会被释放,当wait方法返回的时候,线程会重新持有锁调动notify(),notifyAll()方法之前,必须要先持有锁,调用notify(),notifyAll()...原创 2020-01-06 21:56:41 · 420 阅读 · 1 评论 -
样例join()方法
join()方法常常可能作为面试点:如何保证线程A一定等到线程B执行完以后再执行?方法:线程A,执行了线程B的join()方法,线程A必须要等待B执行完成了以后,线程A才能继续自己的工作。也可以用countDownLatch实现线程的顺序执行。以下直接上样例代码:import com.xiangxue.tools.SleepTools;/** * 类说明:演示下join方法的...原创 2020-01-02 22:45:33 · 122 阅读 · 0 评论 -
线程间协作-使用wait/notify/notifyAll
轮询:难以保证及时性,资源开销很大,等待和通知wait() 对象上的方法notify/notifyAll 对象上的方法等待和通知的标准范式等待方:获取对象的锁; 循环里判断条件是否满足,不满足调用wait方法, 条件满足执行业务逻辑通知方: 获取对象的锁; 改变条件 通知所有等待在对象的线程 notify和notifyAll应该用谁...原创 2020-01-02 21:41:34 · 105 阅读 · 0 评论 -
Map 集合遍历的4种方法
Map 集合初始化时,指定集合初始值大小。说明:HashMap 使用 HashMap(int initialCapacity) 初始化。正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即 loaderfactor)默认为 0.75,如果暂时无法确定初始值大小,请设置为 16(即默认值)。反例:HashMap 需要放置 1024 个...原创 2019-12-29 22:32:59 · 111 阅读 · 0 评论 -
Java 8中处理集合的优雅姿势——Stream
Java 8中处理集合的优雅姿势——Stream在Java中,集合和数组是我们经常会用到的数据结构,需要经常对他们做增、删、改、查、聚合、统计、过滤等操作。相比之下,关系型数据库中也同样有这些操作,但是在Java 8之前,集合和数组的处理并不是很便捷。不过,这一问题在Java 8中得到了改善,Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。本文就...原创 2019-12-28 21:40:15 · 231 阅读 · 0 评论 -
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 · 85 阅读 · 0 评论 -
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 · 88 阅读 · 0 评论 -
基于AQS的CountDownLatch源码分析与使用
CountDownLatch的作用很简单,就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执行完才可以。我们举一个例子来说明,在考试的时候,老师必须要等到所有人交了试卷才可以走。此时老师就相当于等待线程,而学生就好比是执行的线程。 注意:java中还有一个同步工具类叫做CyclicBarrier(多个线程间相互等待),他的作用和CountDownLatch类似。同样是等...原创 2019-11-19 23:12:16 · 107 阅读 · 0 评论 -
关于显示锁与AQS学习整理
最近一直在学习各种锁的相关知识,这篇文章作为个人的学习整理,有优秀博客,也有学习视频也有参考书籍,记录,好记性不如烂笔头,加油我也可以很厉害的。遇到锁的东西会不断更新在此。。。显式锁说道显示锁,首先得介绍Lock接口Lock接口和核心方法void lock():获取锁,若没获取到锁则会阻塞。 void unlock():释放锁。 boolean tryLock():尝试去...原创 2019-11-05 22:11:45 · 154 阅读 · 0 评论