
java
文章平均质量分 76
purisuit_knowledge
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java异步编程历史概述
1.Java5.0之前主要是通过Thread类,Runnable接口实现,主要的缺点是无法拿到异步线程的返回值,以及异常处理new Thread(()-> System.out.println("111111"),"java5").start();2.java5.0增加Future,Callable。主要缺点阻塞式编程,无法进行多个异步线程之间的操作,无法异常处理ExecutorService executorService = Executors.newSingleThreadExe原创 2020-05-26 15:39:24 · 258 阅读 · 0 评论 -
快速排序(java实现)
高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放...转载 2019-11-04 14:50:52 · 162 阅读 · 0 评论 -
Java并发编程:同步容器
为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列、Synchronizer(比如CountDownLatch)。今天我们就来讨论下同步容器。 以下是本文的目录大纲: 一.为什么会出现同步容器? 二.Java中的同步容器类 三.同步容器的缺陷 若有不正之处请多多谅解,并欢迎批评指正。 请尊重作者劳动成果,...转载 2019-05-13 17:24:06 · 117 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来...转载 2019-05-13 17:23:00 · 147 阅读 · 0 评论 -
Java并发编程:Lock
在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。 也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本文先从synchronize...转载 2019-05-13 17:21:15 · 106 阅读 · 0 评论 -
Java并发编程:synchronized
虽然多线程编程极大地提高了效率,但是也会带来一定的隐患。比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据。今天我们就来一起讨论下线程安全问题,以及Java中提供了什么机制来解决线程安全问题。 以下是本文的目录大纲: 一.什么时候会出现线程安全问题? 二.如何解决线程安全问题? 三.synchronized同步方法或者同步块 若有...转载 2019-05-13 17:00:30 · 108 阅读 · 0 评论 -
Java并发编程:Thread类的使用
以下是本文的目录大纲: 一.线程的状态 二.上下文切换 三.Thread类中的方法 若有不正之处,请多多谅解并欢迎批评指正。 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin0520/p/3920357.html一.线程的状态 在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状...转载 2019-05-13 16:40:14 · 114 阅读 · 0 评论 -
JDK8函数式接口Function、Consumer、Predicate、Supplier
转载自:https://blog.youkuaiyun.com/z834410038/article/details/77370785备注1:观察发现,函数式接口下共有1、三种方法1.1唯一的抽象方法1.2 使用default定义普通方法(默认方法),通过对象调用。实现接口后,因为默认方法不是抽象方法,所以可以不重写,但是如果开发需要,也可以重写 。当然如果接口中的默认方法不能满...转载 2019-05-24 21:37:59 · 155 阅读 · 0 评论 -
JDK1.8-Stream()使用详解
为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集...转载 2019-05-20 17:00:04 · 189 阅读 · 0 评论 -
ava并发编程:并发容器之ConcurrentHashMap(转载)
下面这部分内容转载自: http://www.haogongju.net/art/2350374 JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能。因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了并发性,当多个线程竞争容器时,吞吐量严重降低。因此Java5.0开始针对多线程并发...转载 2019-05-13 17:25:25 · 129 阅读 · 0 评论 -
Java并发编程:阻塞队列
在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。 在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了De...转载 2019-05-13 17:26:22 · 121 阅读 · 0 评论 -
Java并发编程:线程池的使用
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的...转载 2019-05-13 17:27:21 · 168 阅读 · 0 评论 -
Java并发编程:Callable、Future和FutureTask
在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务...转载 2019-05-13 17:28:15 · 140 阅读 · 0 评论 -
Java并发编程:Timer和TimerTask(转载)
下面内容转载自: http://blog.youkuaiyun.com/xieyuooo/article/details/8607220 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现,例如这样: 1 2 3 4 5 6 Timer ti...转载 2019-05-13 17:29:10 · 109 阅读 · 0 评论 -
设计模式之策略模式
转载自:https://blog.youkuaiyun.com/qdjdeveloper/article/details/73385636这里我们还是用《Head First》一书中的例子来进行讲解,一步步来引出策略模式,在前几篇文章中我们分别分享了设计模式入门和单例模式以及非常重要的观察者模式,如果需要大家可以去看看,今天我们来由浅入深的一起来看看策略模式,看看策略模式的定义,在实际编码的过程中能...转载 2019-05-17 19:29:01 · 130 阅读 · 0 评论 -
Java垃圾回收机制
JVM好文章:https://www.infoq.cn/article/3WyReTKqrHIvtw4frmr3?utm_source=rss&utm_medium=articlehttps://blog.youkuaiyun.com/coderlius/article/details/79272773:https://www.javazhiyin.com/36101.html...转载 2019-06-21 18:58:05 · 212 阅读 · 0 评论 -
分布式-微服务-集群的区别
1.分布式将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。区别分布式的方式是根据不同机器不同业务。上面:service A、B、C、D 分别是业务组件,通过API Geteway进行业务访问。注:分布式需要做好事务管理。分布式事务可参考:微服务架构的分布式事务解决方案2.集群模式集群模式是不同服务器部署同一套服...原创 2019-08-15 15:42:35 · 134 阅读 · 0 评论 -
高并发架构演变历史
当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题。为了解决这些性能压力带来问题,我们需要在Web系统架构层面搭建多个层次的缓存机制。在不同的压力阶段,我们会遇到不同的问题,通过搭建不同的服务和架构来解决。 Web负载均衡 Web负载均衡(Load Balancing),简单地说就是给我们的服务...原创 2019-08-15 15:44:25 · 2894 阅读 · 0 评论 -
深入理解ReentrantLock与Condition
锁的概念从jdk发行1.5版本之后,在原来synchronize的基础上,增加了重入锁ReentrantLock。转载自:https://www.cnblogs.com/superfj/p/7543927.html本文就不介绍synchronize了,有兴趣的同学可以去了解一下,本文重点介绍ReentrantLock。锁是什么?并发编程的时候,比如说有一个业务是读写操作,那多个...转载 2019-08-23 13:33:10 · 380 阅读 · 0 评论 -
JDK1.8中的Lambda表达式和Stream
Java8最值得学习的特性就是Lambda表达式和Stream API,如果有python或者javascript的语言基础,对理解Lambda表达式有很大帮助,因为Java正在将自己变的更高(Sha)级(Gua),更人性化。--------可以这么说lambda表达式其实就是实现SAM接口的语法糖。lambda写的好可以极大的减少代码冗余,同时可读性也好过冗长的内部类,匿名类。先列举...转载 2019-05-20 16:56:25 · 467 阅读 · 0 评论 -
LinkedBlockingQueue和ConcurrentLinkedQueue之间区别
前置名次解释:(1)队列队列是一种先进先出(FIFO)的数据结构,它有两个基本操作,分别是往队列头部删除一个元素,往队尾添加一个元素。像排队上车一样。(2)阻塞可以简单地理解为同步。线程在得到返回结果之前,一直处于挂起的状态,得到返回结果之后,线程才继续执行,这种状态就是阻塞。例如在生活中,经理让秘书修改文档,如果是阻塞调用的话,那么,经理一直等待秘书,当秘书修改完文档之后,经理才...原创 2019-04-01 18:53:11 · 3461 阅读 · 0 评论 -
StringUtil使用手册
StringUtil使用手册:https://wenku.baidu.com/view/dd8972be83d049649b6658d6.html###原创 2017-03-21 15:35:05 · 306 阅读 · 0 评论 -
Guava学习笔记:Google Guava 类库简介
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦。下面我转载 2017-03-21 14:21:51 · 385 阅读 · 0 评论 -
java日志框架学习
https://my.oschina.net/pingpangkuangmo/blog/410224转载 2017-02-27 18:10:44 · 265 阅读 · 0 评论 -
深入Spring:自定义注解加载和使用
本文转载自:http://www.cnblogs.com/wcongcode/p/5482239.html对本文可以补充的有:http://chenjumin.iteye.com/blog/454459http://www.cnblogs.com/shipengzhi/articles/2716004.html==========================转载 2017-02-24 17:16:46 · 474 阅读 · 0 评论 -
Java高并发
java高并发常用基础知识:1.CountDownLatch的使用应用场景:当初始化需要多个操作的时候。也就是事先需要多个准备工作,然后等所有准备工作做完之后再开始一个新的工作。重点:多个线程在执行,一个线程在等待。package concurrent;import java.util.concurrent.CountDownLatch;/** * CountDo原创 2017-02-08 18:21:30 · 392 阅读 · 0 评论 -
CDH离线安装
转载自:http://blog.youkuaiyun.com/jdplus/article/details/45920733,自己亲自试验已经安装成功,非常感谢作者!CDH (Cloudera’s Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,并集成了很多补丁,可直接用转载 2015-09-10 17:02:47 · 649 阅读 · 0 评论 -
java正则表达式找出不包含特定字符串
推荐文章:http://xixian.iteye.com/blog/1323630 和http://www.jb51.net/article/52491.htm自己的经验是不能和正常的正则表达式一起混用。代码如下:是不能正确判断的public class Test { public static void main(String[] args) {原创 2015-03-06 17:44:25 · 1776 阅读 · 0 评论 -
Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码
只是方便自己使用本文转载自:http://blog.youkuaiyun.com/sunny243788557/article/details/45166397Intellij IDEA 14 作为Java IDE 神器,接触后发现,非常好用,对它爱不释手,打算离开eclipse和myeclipse,投入Intellij IDEA的怀抱。 然而在使用的过程中会发现Int转载 2017-10-16 17:13:40 · 367 阅读 · 0 评论 -
通过jstack日志分析和问题排查
转载:https://blog.youkuaiyun.com/zxp_cpinfo/article/details/54971115前段事件公司出现了一个严重故障(调用dubbo服务一直处于超时,整个服务系统发生雪崩,系统彻底访问不了),一开始怎么都找不到问题的根源,日志的表现形式是dubbo线程池用完了,那么具体是什么导致的没有找到,后然通过jstack日志分析才找到问题的根源,根源就是系统日志代码写有问题...转载 2018-05-03 16:22:34 · 1319 阅读 · 0 评论 -
线上Java程序导致服务器CPU占用率过高的问题排除过程
参考:https://blog.youkuaiyun.com/leixingbang1989/article/details/792908951、故障现象客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高。2、CPU占用过高问题定位2.1、定位问题进程使用top命令查看资源占用情况,发现pid为14063的进程占用了大...转载 2019-03-29 16:23:14 · 154 阅读 · 0 评论 -
JDK工具(查看JVM参数、内存使用情况及分析等)
在JDK的bin目录下有很多命令行工具: 我们可以看到各个工具的体积基本上都稳定在27kb左右,这个不是JDK开发团队刻意为之的,而是因为这些工具大多数是jdk\lib\tools.jar类库的一层薄包装而已,他们的主要功能代码是在tools类库中实现的。命令行工具的好处是:当应用程序部署到生产环境后,无论是直接接触物理服务器还是远程telnet到服务器上都会受...转载 2018-11-29 14:56:06 · 301 阅读 · 0 评论 -
JVM参数
JVM的DirectMemory设置几台服务器的JVM占用内存总是持续增长,大大超过-Xmx设定的值,服务器物理内存几乎被耗尽。使用jmap查看JVM的内存使用,发现jvm的堆大小完全在-Xmx参数设定的范围之内,那问题只能处在别的地方了。JVM除了堆内存之外,就只有栈内存和DirectMemory了。栈空间每个线程是固定的,线程数也没可能多到可以占用这么多内存的程序,所以怀疑的目标就...转载 2018-11-29 14:09:00 · 226 阅读 · 0 评论 -
Linux中常用的监控CPU整体性能的工具
转载自:https://blog.youkuaiyun.com/shenzhen206/article/details/54617992 Linux中常用的监控CPU整体性能的工具有: mpstat: mpstat 不但能查看所有CPU的平均信息,还能查看指定CPU的信息。 vmstat:只能查看所有CPU的平均信息;查看cpu队列信息; iostat: 只能查看所有CPU的平均信息...转载 2018-11-21 18:52:47 · 1388 阅读 · 0 评论 -
JVM crash排错
转载自:https://my.oschina.net/xionghui/blog/498785?p=1https://www.cnblogs.com/jiangxiaoyaoblog/p/5723753.html 当jvm出现致命错误时,会生成一个错误文件 hs_err_pid<pid>.log,其中包括了导致jvm crash的重要信息,可以通过分析该文件定位到导致c...转载 2018-11-14 11:53:13 · 675 阅读 · 0 评论 -
Jvm学习
转载自:https://blog.youkuaiyun.com/ning109314/article/details/10411495/ 在我们运行和调试Java程序的时候,经常会提到一个JVM的概念.JVM是Java程序运行的环境,但是他同时一个操作系统的一个应用程序一个进程,因此他也有他自己的运行的生命周期,也有自己的代码和数据空间.首先来说一下JVM工作原理中的jdk这个东西,不管你是初学者...转载 2018-11-14 11:51:40 · 177 阅读 · 0 评论 -
Java 异常详解
转载:https://blog.youkuaiyun.com/weisg81/article/details/52139179异常类型Java中已存在许多定义好的异常类型供我们使用,可通过查看Java文档查看,我们可以自己定义异常类,就必须从现有的异常类继承。那我们先来看看Throwable类相关的方法。方法汇总直到Java1.7,Throwable提供了4个公开的(public)和1个自...转载 2018-10-19 17:42:30 · 200 阅读 · 0 评论 -
BitSet学习
转载自:https://www.cnblogs.com/happyPawpaw/p/3823277.htmlhttp://shift-alt-ctrl.iteye.com/blog/2194519https://www.cnblogs.com/ncbest/p/7703615.html1,BitSet类 大小可动态改变, 取值为true或false的位集合。用于表示一组布尔标志。 ...转载 2018-06-26 16:54:25 · 309 阅读 · 0 评论 -
深入理解java内部类和匿名内部类
1.如果有人问你在java中接口可以new吗?我想答案应该是yes,实现匿名内部类的时候。http://blog.youkuaiyun.com/cntanghai/article/details/60944812.如果有人问你类是否可以被private等修饰,我想答案是yes,内部类的好处之一。1.内部类可以很好的实现隐藏 一般的非内部类,是不允许有 private 与原创 2015-03-05 10:32:49 · 698 阅读 · 0 评论