Java
想跑步丶小胖子
爱学习的小胖子
展开
-
介绍 ForkJoinPool 的适用场景,实现原理
本文的主要目的是介绍 ForkJoinPool 的适用场景,实现原理,以及示例代码。说在前面可以说是说明,也可以说下面是结论:ForkJoinPool 不是为了替代 ExecutorService,而是它的补充,在某些应用场景下性能比 ExecutorService 更好。ForkJoinPool 主要用于实现“分而治之”的算法,特别是分治之后递归调用的函数,例如 quick sort 等...转载 2019-06-17 16:05:53 · 83091 阅读 · 5 评论 -
Java5 并发学习
Java5 并发学习在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动、调度、管理线程的一大堆API了。在Java5以后,通过 Executor来启动线程比用Thread的start()更好。在新特征中,可以很容易控制线程的启动、执行和关闭过程,还可以很容易使用线程池的特 性。 一、创建任务 任务就是一个实现了Runnable接口的类。创建的时候实run...转载 2018-09-27 09:30:09 · 153 阅读 · 0 评论 -
Java多线程性能优化
Java多线程性能优化大家使用多线程无非是为了提高性能,但如果多线程使用不当,不但性能提升不明显,而且会使得资源消耗更大。下面列举一下可能会造成多线程性能问题的点: 死锁 过多串行化 过多锁竞争 切换上下文 内存同步 下面分别解析以上性能隐患死锁关于死锁,我们在学习操作系统的时候就知道它产生的原因和危害,这里就不从原理上去累述了,可以从...转载 2018-09-21 10:52:42 · 2433 阅读 · 0 评论 -
多线程访问成员变量与局部变量
多线程访问成员变量与局部变量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...转载 2018-09-21 10:47:11 · 241 阅读 · 0 评论 -
Java实现主线程等待子线程join,CountDownLatch
Java实现主线程等待子线程本文介绍两种主线程等待子线程的实现方式,以5个子线程来说明:1、使用Thread的join()方法,join()方法会阻塞主线程继续向下执行。2、使用Java.util.concurrent中的CountDownLatch,是一个倒数计数器。初始化时先设置一个倒数计数初始值,每调用一次countDown()方法,倒数值减一,他的await()方法会阻塞当前进...转载 2018-09-21 10:45:01 · 386 阅读 · 0 评论 -
Synchronized块同步变量的误区
Synchronized块同步变量的误区我们可以通过synchronized块来同步特定的静态或非静态方法。要想实现这种需求必须为这些特性的方法定义一个类变量,然后将这些方法的代码用synchronized块括起来,并将这个类变量作为参数传入synchronized块。下面的代码演示了如何同步特定的类方法: Java代码 public class SyncThread exten...转载 2018-09-21 10:43:44 · 1644 阅读 · 0 评论 -
线程中释放锁的方式
线程中释放锁的方式# 调用obj的wait(), notify()方法前,必须获得obj锁,也就是必须写在synchronized(obj) {...} 代码段内。# 调用obj.wait()后,线程A就释放了obj的锁,否则线程B无法获得obj锁,也就无法在synchronized(obj) {...} 代码段内唤醒A。# 当obj.wait()方法返回后,线程A需要再次获得obj锁,才...转载 2018-09-21 10:20:49 · 2181 阅读 · 0 评论 -
wait、notify/notifyAll,sleep
1.wait、notify/notifyAll,sleep 详解1、wait()、notify/notifyAll() 方法是Object的本地final方法,无法被重写。2、wait()使当前线程阻塞,前提是 必须先获得锁,一般配合synchronized 关键字使用,即,一般在synchronized 同步代码块里使用 wait()、notify/notifyAll() 方法。3、...转载 2018-09-21 10:19:14 · 134 阅读 · 0 评论 -
synchronized 修饰在 static方法和非static方法的区别
synchronized 修饰在 static方法和非static方法的区别Java中synchronized用在静态方法和非静态方法上面的区别 在Java中,synchronized是用来表示同步的,我们可以synchronized来修饰一个方法。也可以synchronized来修饰方法里面的一个语句块。那么,在static方法和非static方法前面加synchronized到底有什...转载 2018-09-21 09:24:41 · 186 阅读 · 0 评论 -
在多线程情况下 局部变量与全局变量 哪个比较安全呢
在多线程情况下 局部变量与全局变量 哪个比较安全呢局部变量是在堆栈中运行。每个运行的线程都有自己的堆栈。别的线程无法访问得到,因此我们说,局部变量是“安全”的。全局变量在堆中,堆是对所有的线程都可见的。因此在两个以上的线程访问全局变量时,就会出现所谓的“不安全”,a线程访问全局变量,赋值为a,然后中间睡眠了0.001秒,在此期间b进程访问了全局变量,赋值为b了,此时a线程醒来了,抢了处理...转载 2018-09-21 09:23:11 · 1232 阅读 · 0 评论 -
一个函数能否被两个线程同时调用
一个函数能否被两个线程同时调用 其实你可以这样想,函数本身只是代码,代码是只读的,无论多少个线程同时调都无所谓(因为只读嘛)。但是函数里面总要用到数据,如果数据属于线程(比如函数参数、局部变量,存在栈上,每个线程都有自己的栈),那么同时调还是没关系,因为用的本线程的数据;但是如果用了一些全局数据,比如全局变量,同时操作一个数据结构(如对一个链表有什么操作),那就不行了,这时候锁就出来了。...转载 2018-09-21 09:21:23 · 6130 阅读 · 0 评论 -
测试多个线程调用同一静态方法(无静态变量)时是否有线程安全问题
测试多个线程调用同一静态方法(无静态变量)时是否有线程安全问题思路:使用两个线程调用同一静态方法(该静态方法不引用静态变量)、第一个线程被阻塞的时间大于第二个线程被阻塞的时间,若第一个线程与第二个线程的输出结果相同,则两个线程调用同一静态方法存在线程安全问题,若第一个线程于第二个线程的输出结果不同,则两个线程调用同一静态方法不存在线程安全问题;package com.shawearn....转载 2018-09-21 09:20:22 · 587 阅读 · 0 评论 -
MethodHandle(方法句柄)
MethodHandle(方法句柄)MethodHandle(方法句柄)系列之一:MethodHandle和MethodType 阅读此文章的作者建议先了解java反射和动态代理。 java7中为间接调用方法引入了新的api,其中最关键的是java.lang.invoke包,即方法句柄。我们可以看成是java反射的升级版,但是它不反射那样有时候显得冗长、繁重的粗糙。...转载 2018-09-20 16:08:08 · 2016 阅读 · 0 评论 -
集群概念
概念集群(Cluster)集群的概念是和单台服务器相对应的,简单来说集群就是部署多台服务器协同完成一项工作。集群可以分为:1,负载均衡(Load Balance)集群:负责均衡服务器根据负载均衡算法(轮询,随机,哈希,权重等)来分发请求到不同的主服务器。 每个主服务器都是等价的,都可以完成相同的功能 容错(fall-over):容错是负载均衡服务器里面的一个概念。是指当...转载 2018-09-05 09:52:12 · 1687 阅读 · 0 评论 -
Maven详解之仓库------本地仓库、远程仓库
Maven详解之仓库------本地仓库、远程仓库在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。(仓库就是存放依赖和插件的地方)任何的构件都有唯一的坐标,Maven根据这个坐标定义了构件在仓库中的唯一存储路径,解读Maven在仓库中的存储路径:1.基于groupId准...转载 2018-08-16 13:25:31 · 241 阅读 · 0 评论 -
JIRA
JIRA简介及基本概念第一章 JIRA简介1.1 什么是JIRAJIRA 是目前比较流行的基于Java架构的管理系统,由于Atlassian公司对很多开源项目实行免费提供缺陷跟踪服务,因此在开源领域,其认知度比其他的产品要高得多,而且易用性也好一些。同时,开源则是其另一特色,在用户购买其软件的同时,也就将源代码也购置进来,方便做二次开发。JIRA功能全面,界面友好,安装简单,配置灵活,...转载 2018-08-08 15:08:43 · 1506 阅读 · 0 评论 -
LinkedBlockingQueue
LinkedBlockingQueueLinkedBlockingQueue是一个基于已链接节点的、范围任意的blocking queue的实现。 此队列按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。 新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列, ...转载 2018-09-27 09:29:56 · 140 阅读 · 0 评论 -
BlockingQueue的使用
BlockingQueue的使用本例介绍一个特殊的队列:BlockingQueue,如果BlockQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状 态,直到BlockingQueue进了东西才会被唤醒.同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状 态,直到BlockingQueue里有空间才会被唤醒继续操作. ...转载 2018-09-27 09:29:48 · 592 阅读 · 0 评论 -
Java并发编程:Callable、Future和FutureTask
Java并发编程:Callable、Future和FutureTask在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提...转载 2018-09-27 09:29:38 · 126 阅读 · 0 评论 -
静态变量一定要先定义再赋值(乍一听有点懵逼)
我曹乍一看,一定认为你这不废话哈哈,Java 中的变量都不是这样的吗,那么见证奇迹的时刻来了。public class TestStatic { private static int i=1; static { i=100; } public static void main(String[] args) { System....原创 2019-04-04 11:10:01 · 3471 阅读 · 0 评论 -
Java Long /Integer包装类型的值的比较
当时看到Long 的类型的数据比较,脑子都没多想就直接上了==知道公司的一位大哥说出这里有问题。我才去看下了。当这样定义一个Long 包装类型数据 Long i=10L;这个时候起是Java 是会自动调用Long的valueOf 方法的。 public static Long valueOf(long l) { final int offset = 128; ...原创 2019-03-26 10:34:05 · 2059 阅读 · 0 评论 -
Java 线程池
一、Java 线程池 Java通过Executors提供四种线程池,分别为:1、newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。(线程最大并发数不可控制)2、newFixedThreadPool:创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。3、newScheduledThre...转载 2018-11-07 14:27:15 · 155 阅读 · 0 评论 -
JAVA BIO与NIO、AIO的区别(这个容易理解)
JAVA BIO与NIO、AIO的区别(这个容易理解) IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。一、BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送...转载 2018-10-26 10:30:45 · 154 阅读 · 0 评论 -
java 常用IO流操作详解
java 常用IO流操作详解1.基本概念IO:Java对数据的操作是通过流的方式,IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中。2.IO流的分类图示:(主要IO流) 3.字节流(1).字节流基类1).InputStreamInputStream:字节输入流基类,抽象类是表示字节输入流的所有类的超类。 常用...转载 2018-10-26 10:26:08 · 166 阅读 · 0 评论 -
读取classpath 下的文件
首先分两大类按web容器分类一种是普通的web项目,像用Tomcat容器,特点是压缩包随着容器的启动会解压缩成一个文件夹,项目访问的时候,实际是去访问文件夹,而不是jar或者war包这种的无论你是用获取路径的方法this.getClass().getResource("/")+fileName,获取流的方法this.getClass().getResourceAsStream(failNa...转载 2018-10-29 10:04:08 · 651 阅读 · 0 评论 -
JAXB解析xml
一。概述JAXB(Java Architecture for XML Binding)是由 J2EE 体系中标准的 XML schema 和 Java 数据绑定框架,开发者可以使用 JAXB 方便地在 Java 应用程序中进行XML 数据和 Java 对象的转换。JAXB 提供了将 XML 文档解析为 Java 内容树的方法,以及将 Java 内容树重新写回 XML 文档的方法。同时 JAXB...转载 2018-10-19 16:33:46 · 1585 阅读 · 0 评论 -
JAXB和XStream比较
JAXB和XStream比较这两东东本质上是有差别的,JAXB称为OX binding工具,XStream应该算序列化工具,但OX binding工具也会marshall和unmarshall,所以包含了序列化这一部分。序列化工具不一定需要提供binding的功能。既然都玩序列化,那就简单地比较一下它们两在序列化方面的强弱吧。JAXB:Toplink JAXB 10133,应该是JAXB ...转载 2018-10-19 11:16:33 · 1440 阅读 · 0 评论 -
关于JAXP, JAXB, SAX, StAX, DOM等名词解释
关于JAXP, JAXB, SAX, StAX, DOM等名词解释 DOM(Document Object Model):SAX和DOM最先出来的两种解析器。是一种tree-based API。DOM的特点是,把整个XML内容读取内存中进行处理。 优点:可以随机进行对某个节点内容进行读取和写入。缺点:耗费内存,性能差。 如果要对XML内容进行很多随机的读取其中的内容,或...转载 2018-10-19 11:10:21 · 531 阅读 · 0 评论 -
多重循环中的break,continue
多重循环中的break,continue的使用public static void main(String[] args) { List<Integer> list1 = Arrays.asList(1,2,3,4,5); List<String> list2 = Arrays.asList("a","b","c","d");原创 2018-09-30 17:25:36 · 1753 阅读 · 0 评论 -
URLEncoder 和URLDecoder
通常在url字符串的编码转换上,可以使用这两个类:public static void main(String[] args) { String str = "你好吗?我很好!"; try { String str2 = URLEncoder.encode(str, "utf-8"); System.out.pri...转载 2018-10-18 10:48:23 · 777 阅读 · 0 评论 -
Java对象及对象引用变量
Java对象及其引用关于对象与引用之间的一些基本概念。 初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象引用, 那实在没法很好地理解下面的面向对象技术。把自己的一点认识写下来,或许能让初学Java的朋友们少走一点弯路。 为便于说明,我们先定义一个简单的...转载 2018-10-15 09:14:31 · 137 阅读 · 1 评论 -
HttpURLconnection使用POST方式提交JSON数据给服务器
HttpURLconnection使用POST方式提交JSON数据给服务器版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caidi1988314/article/details/72916165HttpURLconnection使用POST方式提交JSON数据给服务器最原始的味道,使用HttpURLconnection提交JSON数据...转载 2018-09-29 10:41:50 · 1211 阅读 · 0 评论 -
java 常见几种发送http请求案例
<span style="font-family: Arial, Helvetica, sans-serif;">import java.io.BufferedReader;</span> import java.io.FileOutputStream; import java.io.IOException; import java.i...转载 2018-09-28 20:53:52 · 173 阅读 · 0 评论 -
Math
java中的开方Math.sqrt(n)函数和平方{a的b次方Math.pow(a, b)} 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010735684/article/details/470021091,**重点内容**sqrt是开方:比如math.sqrt(9)结果为3 意思是求9的开方根,数学上称为根号2下的92.*...转载 2018-10-12 13:58:18 · 150 阅读 · 0 评论 -
Sharding-JDBC 读写分离
环境概览框架 版本号 Spring Boot 1.5.12.RELEASE Sharding-JDBC 2.0.3 MyBatis-Plus 2.2.0 前言介绍Sharding-JDBC是当当网的一个开源项目,只需引入jar即可轻松实现读写分离与分库分表。与MyCat不同的是,Sharding-JDBC致力于提供轻量级的服务框架,无需额外部署,底层...转载 2018-08-14 09:11:36 · 4785 阅读 · 4 评论 -
全局异常处理
方式一最垃圾:使用 @ ExceptionHandler 注解使用该注解有一个不好的地方就是:进行异常处理的方法必须与出错的方法在同一个Controller里面。使用如下:@Controller public class GlobalController { /** * 用于处理异常的 * @return...原创 2018-08-10 13:40:55 · 598 阅读 · 0 评论 -
java类的加载机制 和类的初始化
3 1、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载器并不需要等到某个类被...转载 2018-08-10 09:53:50 · 154 阅读 · 0 评论 -
Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例
概要这一章,我们对HashMap进行学习。我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap。内容包括:第1部分 HashMap介绍第2部分 HashMap数据结构第3部分 HashMap源码解析(基于JDK1.6.0_45) 第3.1部分 HashMap的“拉链法”相关内容 第3.2部分 HashMap的构造函数 第3.3部分 Ha...转载 2018-06-25 17:46:17 · 115 阅读 · 0 评论 -
Java 集合系列09之 Map架构
概要前面,我们已经系统的对List进行了学习。接下来,我们先学习Map,然后再学习Set;因为Set的实现类都是基于Map来实现的(如,HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的)。首先,我们看看Map架构。如上图:(01) Map 是映射接口,Map中存储的内容是键值对(key-value)。(02) AbstractMap 是继承于Map的抽象类,它实...转载 2018-06-25 17:45:21 · 75 阅读 · 0 评论 -
Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
概要前面,我们学完了List的全部内容(ArrayList, LinkedList, Vector, Stack)。Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法) Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例Java 集合...转载 2018-06-25 17:44:38 · 109 阅读 · 0 评论