自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 spring的controller是单例还是多例,怎么保证并发的安全。

答案:controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。正因为单例所以不是线程安全的。我们下面来简单的验证下:package com.riemann.springbootdemo.controller;import org.springframework.context.annotation.Scope;import org.springframew...

2019-07-29 23:48:06 14268 13

原创 线程池的关闭方式有几种,各自的区别是什么。

一、概述Java提供的接口 java.util.concurrent.ExecutorService是一种异步执行的机制,可以让任务在后台执行。其实例就像一个线程池,可以对任务进行统一的管理。二、研究Java提供的对ExecutorService的关闭方式有两种,一种是调用其shutdown()方法,另一种是调用shutdownNow()方法。这两者是有区别的。以下内容摘自源代码内的注释...

2019-07-29 00:28:55 2846

原创 Java并发编程中四种线程池

我们先来看一下下面这个问题!!!Question:用过线程池吗,如果用过,请说明原理,并说说newCache和newFixed有什么区别,构造函数的各个参数的含义是什么,比如coreSize,maxsize等。Answer:newSingleThreadExecutor返回一个包含单线程的Executor,将多个任务交给此Executor时,这个线程处理完一个任务后接着处理下一个任务,若...

2019-07-28 18:52:01 587

原创 Java并发编程中常见的并发工具类

今天有时间看了下《Java并发编程的艺术》这本书,看到并发用到的工具类,故记录之。如果有朋友需要电子版的可以在下面百度网盘进行下载:《Java并发编程的艺术》接下来我们进入正题,JDK中的并发包里,提供了几个非常有用的并发工具类。CountDownLatch、CyclicBarrier 和 Semaphore工具类提供了一种并发流程控制的手段。Exchanger工具类则提供了在线程间交换...

2019-07-28 00:08:00 296

原创 Java并发编程中的原子类总结

一、原子类介绍在并发编程中很容易出现并发安全的问题,有一个很简单的例子就是多线程更新变量i=1,比如多个线程执行i++操作,就有可能获取不到正确的值,而这个问题,最常用的方法是通过Synchronized进行控制来达到线程安全的目的(关于synchronized可以看这篇文章)。但是由于synchronized是采用的是悲观锁策略,并不是特别高效的一种解决方案。实际上,在J.U.C下的atomi...

2019-07-27 21:05:17 109

原创 可重入锁/不可重入锁,公平锁/非公平锁,乐观锁/悲观锁,独享锁/共享锁,偏向锁/轻量级锁/重量级锁,分段锁,自旋锁

在并发编程中,会涉及到各种各样的锁,这篇文章主要介绍各种锁的分类以及作用。介绍的内容如下:可重入锁/不可重入锁公平锁/非公平锁乐观锁/悲观锁独享锁/共享锁偏向锁/轻量级锁/重量级锁分段锁自旋锁上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。1、可重入锁/不可重入锁可重入锁广义上的可重入锁指的...

2019-07-22 23:55:22 464

原创 Exception in thread "RMI TCP Connection(idle)" java.lang.OutOfMemoryError: GC overhead limit exceede

解决办法:在tomcat中的以下位置配置vm,数据大小根据自己需要。-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

2019-07-20 15:37:21 816

原创 Invocation of init method failed; nested exception is java.lang.OutOfMemoryError: GC overhead limit

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration': Invocation of init method failed; nested excep...

2019-07-20 11:55:53 286

原创 Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped [SELECT count(u.id) FROM User u WHERE u.platform = :platform AND u.updatedDate <= :updatedDate] at org.hibernate....

2019-07-20 11:29:16 493

原创 并发编程实现生产者和消费者模式

一、简介生产者和消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此并不直接通信,而是通过阻塞队列进行通信,所以生产者生产完数据后不用等待消费者进行处理,而是直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列中获取数据,阻塞队列就相当于一个缓冲区,平衡生产者和消费者的处理能力。二、实现方式1、synchronized、wait和notify生产者和消费者线...

2019-07-20 02:09:50 417

原创 Lock与Synchronized的区别

两者区别1、首先synchronized是java内置关键字,在jvm层面,Lock是个java类;2、synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;3、synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;4...

2019-07-18 23:18:30 910 2

原创 final的两个重排序规则

对于final 域,编译器和处理器要遵守两个重排序规则:1、在构造函数内对一个 final 域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。2、初次读一个包含 final 域的对象的引用,与随后初次读这个 final 域,这两个操作之间不能重排序。先看一段示例代码:package com.test;/** * final域为基本类型 * * @...

2019-07-18 00:50:16 1586

原创 Java经典基础面试题,你会几道?(3)

下面这道题介绍 BigDecimal1、BigDecimal 的用处《阿里巴巴Java开发手册》中提到:浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用 equals 来判断。 具体原理和浮点数的编码方式有关,这里就不多提了,我们下面直接上实例:float a = 1.0f - 0.9f;float b = 0.9f - 0.8f;System.out.printl...

2019-07-16 23:42:06 163

原创 画一个线程的生命周期状态图

一、线程的生命周期线程状态转换图:1、新建状态(New)用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable)。注意:不能对已经启动的线程再次调用start()方法,否则会出现java.lang.IllegalThreadStateException异常。2、就绪状态...

2019-07-16 00:43:46 2721

原创 sleep和sleep(0)的区别

Sleep 接口均带有表示睡眠时间长度的参数 timeout。调用以上提到的 Sleep 接口,会有条件地将调用线程从当前处理器上移除,并且有可能将它从线程调度器的可运行队列中移除。这个条件取决于调用 Sleep 时timeout 参数。当 timeout = 0, 即 Sleep(0),如果线程调度器的可运行队列中有大于或等于当前线程优先级的就绪线程存在,操作系统会将当前线程从处理器上移除,调...

2019-07-16 00:06:31 739

原创 Correct the classpath of your application so that it contains a single, compatible version of javax.

2019-07-14 18:29:33.360 ERROR 5360 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : ***************************APPLICATION FAILED TO START***************************Description:...

2019-07-14 18:45:30 628

原创 Java实现一个线程安全的循环单链表

有时候会有需要这样的场景,需要一个循环的链表做一些重复性的工作,比方说我们设计定时任务的时候,按照每一秒前进一个进行定时任务的读取,那么就需要有一个循环链表来做这样的数据结构,而java没有提供这样的一个数据结构,我在项目开发的时候也遇到了这样的问题,我们需要有管理定时任务,使用一个触发器来触发这些任务。定义接口:package com.algorithm.list;/** * 循环链表...

2019-07-14 02:50:26 462 2

原创 volatile的原理与作用

一、概念volatile关键字表示被修饰的变量的值容易变化( 即被其他线程更改 )。因而不稳定。volatile变量的不稳定性意味着对这种变量的读和写操作都必须从高速缓存或者主内存。(也是通过高速缓存读取)中读取,以读取变量的相对新值。因此,volatile变量不会被编译器分配到寄存器进行存储,对 volatile 变量的读写操作都是内存访问( 访问高速缓存相当于主内存 )操作。volati...

2019-07-13 19:13:47 390

原创 Java多线程的五种实现方式

Java多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。一、第一种方式:继承Thread类万物皆对象,那么线程也是对象,对象就应该能够抽取其公共特性封装成为类,使用类可以实例化多个对象,那么实现线程的第一种方式就是继...

2019-07-13 17:14:27 227

原创 Java新特性:Java8 Stream 简单快速的处理集合(三)

没有看过上篇文章的可以先点击进去学习一下一、数值流前面介绍的如int sum = list.stream().map(Person::getAge).reduce(0, Integer::sum); 计算元素总和的方法其中暗含了装箱成本,map(Person::getAge) 方法过后流变成了 Stream 类型,而每个 Integer 都要拆箱成一个原始类型再进行 sum 方法求和,这样大大...

2019-07-12 00:04:52 169

原创 Java新特性:Java8 Stream 简单快速的处理集合(二)

一、概述继Java 新特性系列之Lambda表达式之后,我们来了解Stream。Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找、遍历、过滤以及常见计算等。二、聚合操作我们先定义一个 Person 类:package com.stream;import ...

2019-07-10 23:49:44 122

原创 Go语言实战:第一个Go程序(二)

前面一章主要讲了 Go 的一些重要特性,接下来我们来实践一下,写一个简单的 Go 程序。1、安装 Go 以及编译环境安装包下载地址为:https://golang.google.cn/dl/我这里是在Windows下使用,在Linux或者其他环境下使用的小伙伴可以自行下载相应的安装包。默认情况下.msi文件会安装在 c:\Go 目录下,你可以修改为其他的目录,如我自己的路径是 D:\To...

2019-07-10 01:10:38 74

原创 Go语言实战:关于Go语言的介绍(一)

一、简介Go语言的语法简洁到只有几个关键字,便于记忆。而且其编译速度非常快,Go开发者能显著减少等待项目构建的时间。因为Go语言内置并发机制,所以不用被迫使用特定的线程库,就能让软件扩展,使用更多的资源。Go语言的类型系统简单且高效,不需要为面向对象开发付出额外的心智,让开发者能专注于代码复用。Go语言还自带垃圾回收器,不需要用户自己管理内存。让我们快速浏览一下这些关键特性。二、并发Go语言...

2019-07-10 00:52:48 70

原创 MySQL的主从延迟怎么解决

一、MySQL的数据库主从复制原理MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示:分为四步走:主库对所有DDL和DML产生的日志写进binlog;主库生成一个 log dump 线程,用来给从库I/O线程读取binlog;从库的I/O Thread去请求主库的binlog,并将得到的binlog日志写到relay log文件中;从库的SQL Threa...

2019-07-06 17:09:15 370

原创 mysql在Windows下使用mysqldump命令手动备份数据库和自动备份数据库

手动备份:cmd控制台:先进入mysql所在的bin目录下,如:cd D:\program files (x86)\MySQL\MySQL Server 5.0\binmysqldump -u root -p 数据库 [表名1 表名2..] > 文件路径比如: 把test数据库备份到 d:\test.sqlmysqldump -u root -p test > d:\te...

2019-07-06 16:24:51 922

原创 mysqldump进行数据库导出备份命令行提示“拒绝访问”

解决方法:1、在管理员模式下运行cmd2、一定要指明文件类型,问题解决。D:\program files (x86)\MySQL\MySQL Server 5.0\bin>mysqldump -u root -p test user > C:\Backup\riemann.sql指明文件类型 riemann.sql成功导出备份。...

2019-07-06 15:52:06 2744

原创 The MySQL server is running with the --skip-grant-tables opt ion so it cannot execute this statement

解决办法:执行这条命令:flush privileges再执行mysql> grant replication slave on *.* to 'repl'@'%' identified by'repl';Query OK, 0 rows affected (0.00 sec)这样就OK了。

2019-07-06 12:51:25 112

原创 如何写sql能够有效的使用到复合索引

1、概念单一索引:单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上;复合索引:复合索引也叫组合索引;用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引;同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也就是索引列超过2列的索引;设计索引的一个重要原则就是能用窄索引不用宽索...

2019-07-06 11:50:07 1134

原创 MVCC的含义,如何实现的?

一、MVCC简介1、什么是MVCCMVCC(Multi Version Concurrency Control的简称),代表多版本并发控制。与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control)。MVCC最大的优势:读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能了解MVCC前,我们先学习下M...

2019-07-06 11:28:39 2414 2

原创 JSONObject中Java对象转换成Json格式的两种方式

1、alibaba的JSONObject对象调用toJSONString方法直接转换pom.xml 依赖:<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.41</...

2019-07-04 00:29:18 25485 2

原创 push failed The requested URL returned error: 403

写好代码后,这时候对本地仓库和github进行同步。 git push -u origin mastererror: The requested URL returned error: 403 Forbidden while accessing https://github.com/user/test.git/info/refs这是由于权限问题导致的,可以修改.git/config文件追加...

2019-07-03 23:00:18 1176

原创 Could not read from remote repository.

出现这个问题的原因是我通过SSH加密的方式拉取代码,但我没有配置私钥导致的。下面来配置下:git push origin master出现以下情况:解决办法:删除当前key,然后重新生成key;如果没有该项目的key,则通过下面的命令生成一个key。会在本地C:\Users\你的用户名.ssh生成文件夹,里面有id_rsa和id_rsa.pub两个文件然后复制id_rsa.pub文件...

2019-07-03 22:55:09 255

原创 fatal: not a git repository (or any of the parent directories): .git

从github上拉取代码下来要先执行 下面这行命令git init //创建空的.git在命令行敲入git init回车之后,再重新执行添加文件的命令即可。问题就可以解决了。...

2019-07-03 22:39:20 2738

原创 Java经典基础面试题,你会几道?(2)

下面这道题介绍下Arrays.asList(),在平时开发中还是比较常见的,我们可以使用它将一个数组转换为一个List集合。先上题:int[] myArray = {1, 2, 3};List myList = Arrays.asList(myArray);System.out.println(myList.size());System.out.println(myList.get(0)...

2019-07-03 00:12:40 189

原创 Java经典基础面试题,你会几道?(1)

1、==符号的使用 Integer a = 1000,b=1000; Integer c = 100,d=100; System.out.println(a==b); System.out.println(c==d);如果这道题你能得出正确答案,并能了解其中的原理的话。说明你基础还可以。如果你的答案 是 true 和true的话,你的基础就有所欠缺了。首先公布下答案, 运行代码,我们...

2019-07-01 23:28:00 233 2

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除