java
文章平均质量分 58
longlynn
爱生活!爱技术!
展开
-
快速构建可运行的Spring-boot项目(Hello World)
spring-boot快速构建hello world创建Maven项目 配置pom.xmlproject xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apac原创 2018-01-10 13:25:29 · 534 阅读 · 0 评论 -
一篇文章理解JMS
JMSJMS是什么JMS Java Message Service Java消息服务。是JAVA EE中的一个技术,JMS定义了JAVA中访问消息中间件的接口。类似JDBC。定义了接口,并不具体实现。实现JMS接口消息的中间件称为JMS Provider.例如:ActiveMQ.JMS基本概念JMS MessageJMS Message JMS消息,JMS消息由三部分组成 1.消息头:每个消原创 2017-05-27 10:33:44 · 457 阅读 · 0 评论 -
Invalid bound statement (not found)
在MyBatis使用过程中可能会遇到 Invalid bound statement (not found) 异常,一般情况而言都是配置有所忽略,但有一种情况就是配置文件没有扫描到 图中我们配置mapperLocations一般扫描classpath下的mapper.xml文件。把classpath改成classpath*就行了。原创 2017-05-07 04:04:15 · 361 阅读 · 0 评论 -
Oracle 常用性能监控SQL语句
原文:http://panhongbin100.iteye.com/blog/1596414 1. –查看表锁 SELECT * FROM SYS.V_SQLAREAWHEREDISKREADS>100;2.–监控事例的等待SELECTEVENT,SUM(DECODE(WAITTIME,0,0,1))“Prev”,SUM(DECODE(WAITTIME,0,1,0))“Curr”,COUNT(转载 2017-05-03 17:11:39 · 602 阅读 · 0 评论 -
JAVA多线程之——线程池
线程池线程池顾名思义,就是一个放置线程的池子。就跟数据库连接池差不多。线程池通过对并发线程的控制,能有效的节省系统资源的浪费,提高系统的性能。 学习线程池,先了解一下线程池的一个基本结构: Executorpublic interface Executor { void execute(Runnable command);}Executor是一个接口,其中只有一个方法,就是execu原创 2017-04-06 21:42:59 · 317 阅读 · 0 评论 -
JAVA多线程之——Semaphore
Semaphore一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。 其实Semaphore就是维护了一个共享锁,通过state来决定同时可以多少个线程获取原创 2017-04-05 22:00:52 · 408 阅读 · 0 评论 -
JAVA多线程之——CyclicBarrier
CyclicBarrierCyclicBarrier : N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。 CountDownLatch是某一个线程等待一个或者N个线程。 主体不同,CountDownLatch的主体是某一个线程。它是要一个或者多个线程完成某一个动作之后自己执行。这些线程互相之间是不等待的。 CyclicBaarier 主体是N个线程,就是说大家在某一个点上互相等原创 2017-04-05 20:39:42 · 312 阅读 · 0 评论 -
JAVA多线程之——CountDownLatch
CountDownLatch在学习线程基本知识的时候,学习过一个线程的join方法,该方法就是让当前线程等待,直到当前线程中调用了join方法的线程执行完毕,再执行本线程。加入在导入一个Excel的时候,有多个sheet,那么可能我们就考虑用多个线程分别读取sheet然后保存数据库,再记录日志,然后通知用户导入成功。先看join实现:public class JoinTest {public sta原创 2017-04-05 19:57:25 · 573 阅读 · 0 评论 -
JAVA多线程之——ConcurrentLinkedQueue
ConcurrentLinkedQueueConcurrentLinkedQueue是一个非阻塞的无界队列。非阻塞和阻塞区别。首先了解一下JAVA中多线程的同步机制基本采用三种方式:volatile 轻量级的线程同步,不会引起上下文的切换和线程调度,提供内存的可见性,但不保证原子性。CAS 轻量级的线程同步,不会引起上下文的切换和线程调度,提供内存的可见性和原子性。内部锁(synchro原创 2017-04-04 18:17:02 · 483 阅读 · 1 评论 -
JAVA多线程之——LinkedBlockingQueue
LinkedBlockingQueueLinkedBlockingQueue队列跟ArrayBlockingQueue一样都实现了BlockingQueue。因此同样是阻塞队列,有三种删除和三种添加的方法。LinkedBlockingQueue的底层是基于链表实现。ArrayBlockingQueue通过一个锁和锁的两个条件对象保证并发的安全性,LinkedBlockingQueue通过两个锁和每个原创 2017-04-04 13:55:45 · 962 阅读 · 0 评论 -
JAVA多线程之——ArrayBlockingQueue
ArrayBlockingQueueArrayBlockingQueue队列是BlockingQueue的一个子类.block是阻塞的意思。它是一个阻塞队列,array说明它的底层是基于数组实现。数组是有大小的,所以它是一个有(边)界的队列。综上,ArrayBlockingQueue是一个有界的阻塞队列。 BlockingQueue BlockingQueue接口有三个删除方法和三个添加方法原创 2017-04-03 22:47:44 · 596 阅读 · 0 评论 -
win8在应用与桌面自动切换
今天系统升级后,系统总是频繁的在桌面和当前应用中不停的切换。 最终解决办法如下:将这个服务禁止,问题解决原创 2017-05-19 14:45:16 · 464 阅读 · 0 评论 -
linux下安装Memcached
Memcached安装 下载并安装Memcached服务器端需要安装libevent,去http: //libevent. org/下载 .然后: . configure –prefi x=指定安装的路径 ,make , make install libevent是个程序库,它将Linux的epol l 、BSD类操作系统的kqueue等事件 处理功能封装成统一的接口,具有很高的性能。去原创 2017-06-01 10:51:32 · 277 阅读 · 0 评论 -
spring-data-redis Repositories
SDR中通过支持Repository,操作对于model在缓存中的增删改查,非常方便。 1.Repository spring-data中对于数据库的增删改查的中央存储库。通过它可以对数据库(redis)进行操作。基本的实现为CrudRepository。 2.EnableRedisRepositories 要通过CrudRepository必须先开启支持Repository。原创 2018-01-05 17:18:27 · 13315 阅读 · 1 评论 -
Spring集成Spring-data-redis RedisCacheManager缓存源码分析
在项目中,一般我们会把服务层(service)的一些查询结果和一些数据进行缓存。缓存的种类有很多。这里进行redis作为缓存框架,进行一个缓存的配置。配置前需要先了解一些基本的知识在Spring中缓存主要有一个缓存接口(Cache)与缓存管理接口(CacheManager)。可以通过扩展这两个接口实现对应的缓存管理。redis就是这样。当然还有很多比如Guava等都对其进行了扩展。这里只看原创 2017-12-28 14:31:54 · 39881 阅读 · 4 评论 -
Spring配置多数据源在配置事务后无效完美解决方案
在配置多数据源的时候,我们在配置事物的时候,一般通过AOP来进行数据源切换。Spring的事务与数据源是绑定的。也就说,如果你开启了事务,那么数据源已经绑定了。那么这个时候,你在去切换数据源就无效了。也就是说要想有效,那么久要在事务开启之前就把数据源切换好。网上有一些解决办法:而我们知道在Spring中有一个注解@Order。我们只要吧数据源切面上面加上@Order(0)就能完美的让切换数据源在事务原创 2017-12-20 17:05:35 · 12632 阅读 · 11 评论 -
spring-data-redis ValueOperations
ValueOperations 源码方法 /** *设置 key 的值为 value *如果key不存在添加key 保存值为value *如果key存在则对value进行覆盖 */ void set(K key, V value); /** * 设置 key 的值为 value * 其它规则与 set(K key, V valu原创 2017-12-26 15:16:15 · 19908 阅读 · 0 评论 -
spring-data-redis HashOperations
/** * 从散列中删除给定的多个元素 * @param key 不能为null 散列的名称 * @param hashKeys 需要删除的keys集合 */ Long delete(H key, Object... hashKeys); /** * 判断散列中是否存在某个key */ Boolean hasKey(H原创 2017-12-27 10:58:49 · 17886 阅读 · 0 评论 -
spring-data-redis ZSetOperations
/** * 给有序集合添加一个指定分数的成员 如果成员存在则覆盖 * * @param key must not be {@literal null}. * @param score the score. * @param value the value. * @return */ Boolean add(K key, V原创 2017-12-27 13:19:56 · 3628 阅读 · 0 评论 -
spring-data-redis SetOperations
/** * 给集合key添加多个值,集合不存在创建后再添加 * * @param key 不能为null * @param values * @return */ Long add(K key, V... values); /** * 移除集合中多个value值 * @param key 不能为null原创 2017-12-27 10:04:28 · 8003 阅读 · 1 评论 -
mysql主从复制配置
1.修改主数据库配置文件我的默认位置为/etc/my.cnf添加以下内容:server_id = 1 //主数据库必须配置为1.slave依次增加就行。log-bin=mysql-bin //配置二进制日志 必须配置innodb_flush_log_at_trx_commit=1binlog-do-db = master //配置需要同步的数据库 可以配置多个//binlog-do-db原创 2017-12-22 15:56:09 · 200 阅读 · 0 评论 -
mysql 导入 employees_db-full-1.0.6
mysql导入示例employees数据库步骤: 1.官网下载测试数据库employees数据库下载链接。下载employees_db-full-1.0.6文件。 2.解压压缩文件,进入employees-db文件夹,拷贝所有文件至mysql安装目录bin目录下。 3.进入命令行运行 source employees.sql就可以等待完成原创 2017-09-09 17:24:44 · 2322 阅读 · 0 评论 -
JAVA多线程之——互斥锁ReentrantLock
ReentrantLock简介 首先回顾一下synchronized关键字。 把代码声明为synchronized之后,那么就会保证,每次都只有一个线程获取对象的内部锁,进而产生互斥保证共享资源的安全。synchronized是获取对象的内部锁,所以是原生语法层面的互斥,需要JVM实现。 ReentrantLock是jdk1.5开始引入的JUC并发包中的一个类,ReentrantLock基于j原创 2017-03-27 23:16:27 · 864 阅读 · 0 评论 -
JAVA多线程之——ConcurrentHashMap
ConcurrentHashMap学习了ArrayList与HashSet相对应的线程安全的CopyOnWriteArrayList 与CopyOnWriteArraySet之后,今天学习HashMpa对应的线程安全集合ConcurrentHashMap. HashMap是线程不安全的,HashTable是线程安全的。但是HashTable是通过Synchronized进行同步的,这就导致一个线程原创 2017-04-03 16:39:01 · 288 阅读 · 0 评论 -
JAVA多线程之——并发包JUC——Atomic
前面学习了基础的多线程知识。今天开始学习JAVA的并发包java.util.concurrent。java并发包包括 java.util.concurrent、java.util.concurrent.atomic、java.util.concurrent.locks包。今天开始学习atomic包下的内容’ 概念 java从jdk1.5开始引入了并发包。其中java.util.concurren原创 2017-03-26 23:02:49 · 3256 阅读 · 0 评论 -
JAVA多线程系列之基本概念
线程状态图:线程共包括五种状态: 1.新建状态(new):一个线程创建后,就进入新建状态。 2.就绪状态(Runnable) :就绪状态也叫“可执行状态”。当一个线程处于新建状态时,就可以通过调用该线程的start()方法启动该线程,这个时候线程就处于可执行状态——随时可以被CPU调度执行 3.运行状态(Running):线程获取CPU的权限进行执行。线程只能通过可执行状态进入执行状态转载 2017-03-23 13:17:25 · 221 阅读 · 0 评论 -
JAVA多线程之——Future与Callable
Futrue与Callable在学习了多线程之后,可以知道线程的实现方式是通过继承Thread或者实现Runnable接口,当线程被启动后,会执行run方法。都知道run方法是一个void方法,也就是说线程执行完毕之后,不会返回任何东西。那么,如果我们想得到线程执行的结果怎么呢?这就要用到JUC中的Futrue与Callable了。 Callable public interface Callab原创 2017-04-08 17:29:51 · 342 阅读 · 1 评论 -
JAVA多线程之——线程通信 Condition
线程的通信 前面学习了用wait/notify的方式进行线程通信。今天学习一种更加强大的线程通信方式Condition.Condition的强大之处就是可以为线程建立不同的Condition。然后可以唤醒任意指定阻塞的线程。Condition之所以能为一个线程建立不同的Condition,是因为它也维护着一个阻塞的条件队列。它跟AQS等待队列通过线程的等待、唤醒建立关系。 1.每当AQS队列中的原创 2017-03-29 23:26:23 · 441 阅读 · 0 评论 -
JAVA多线程之——常用线程池
线程池学习了线程池的基本原理后,可以理解线程池的类型控制,主要是通过中心池大小,和最大线程池大小,以及存储工作任务的队列决定。JDK中为我们封装了常用的四种线程池。 在JDK帮助文档中,有如此一段话: “强烈建议程序员使用较为方便的Executors工厂方法Executors.newCachedThreadPool()(无界线程池,可以进行自动线程回收)、Executors.newFixedTh原创 2017-04-08 13:40:19 · 419 阅读 · 0 评论 -
JAVA多线程之——自旋锁、CLH、MCS
自旋锁学习了解自旋锁之前先回顾一下互斥锁 互斥锁 线程在获取互斥锁的时候,如果发现锁已经被其它线程占有,那么线程就会惊醒休眠,然后在适当的时机(比如唤醒)在获取锁。 自旋锁 那么自旋锁顾名思义就是“自旋”。就是当一个线程在尝试获取锁失败之后,线程不会休眠或者挂起,而是一直在循环检测锁是否被其它线程释放。 区别 互斥锁就是开始开销要大于自旋锁。临界区持锁时间的大小并不会对互斥锁的开销造成影原创 2017-03-28 22:38:02 · 2591 阅读 · 0 评论 -
JAVA并发编程实战 ——线程安全性
以前也算是看过并发编程实战这本书。但是一直做的是书中的笔记。如今从头看此书。希望把笔记记录成博客。以便以后查询。怎么确定一个类是线程安全的: 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要添加额外的同步或者协同。这个类都能表现出正确的行为,那么就称这个类是线程安全的。 2.2.1:无状态对象一定是线程安全的 在本书中描述是:既原创 2016-12-19 23:04:36 · 433 阅读 · 0 评论 -
maven项目发布到tomcat以及导包需要注意的几个小问题。
在maven项目发布到tomcat的时候经常遇到一些问题,或者有些问题出现过多次,却经常忘记,再次做个小记录。maven项目发布到tomcat启动web.xml中的一些 java.lang.ClassNotFoundException异常:如 严重: Error configuring application listener of class org.springframewor原创 2016-12-18 00:24:01 · 2495 阅读 · 0 评论 -
JAVA并发编程实战——对象组合
4.1 设计线程安全的类 在设计线程安全类的过程中,需要包含以下三个基本要素: 1.找出构成对象状态的所有变量。 2.找出约束状态变量的不变性条件(找出这些条件,然后对这些条件进行并发策略管理,使其线程安全) 3.建立对象状态的并发访问管理策略。 以上三条理解为:先找出所有具有不变性条件的变量,然后确定这些变量的不变性条件是什么,再对这些不变性条件进行并发访问策略管理(原创 2016-12-21 23:51:51 · 466 阅读 · 0 评论 -
JAVA并发编程实战——对象的共享
3.1 可见性 当多个线程访共享变量时,如果没有正确的同步机制,那么这些线程之间对对象的操作是互相不可见的。public class NoVisibility { private static boolean ready; private static int number; private static class ReaderThread extends原创 2016-12-20 22:41:45 · 405 阅读 · 0 评论 -
MyBatis调用存储过程
*MyBatis调用存储过程* 今天在项目中用到需要调用存储过程,很多人以前没写过。所以在此把调用详细过程记录。原创 2016-12-15 14:05:12 · 452 阅读 · 1 评论 -
JAVA多线程之——线程的实现方式
内容转载:http://www.cnblogs.com/skywang12345/p/3479063.html概要 本章我们学习多线程的两种常用实现方式:继承Thread类与实现Runnable接口。 此外我们还可以通过JUC(java.util.concurrent)中的线程池来实现。本章内容包括: Thread与Runnable简介 Thread 是一个转载 2017-03-23 23:39:58 · 239 阅读 · 0 评论 -
JAVA多线程之——Thread中start()和run()的区别
参考原文:http://www.cnblogs.com/skywang12345/p/3479083.html 线程的启动 上一节中说到,传统的线程可以通过继承Thread类和实现Runnable接口来实现。那么当我们需要一个线程运行的时候。这两种方式又是分别如何运行的呢?1.Thread 类的start() 方法。public class ThreadTest { public sta原创 2017-03-24 16:14:30 · 1049 阅读 · 0 评论 -
JAVA多线程之——CopyOnWriteArraySet
CopyOnWriteArraySetCopyOnWriteArraySet是一个线程安全的HashSet.但是它们的实现并不相同。HashSet是基于散列列表实现的。而CopyOnWriteArraySet的底层实际上是一个CopyOnWriteArrayList.也就是说基于动态数组实现。 在其保证线程安全上跟CopyOnWriteArrayList的机制是一样的。但是因为set集合是不允许重原创 2017-04-03 14:46:35 · 376 阅读 · 0 评论 -
JAVA多线程之——CopyOnWriteArrayList
线程安全的list在学list的时候,应该都了解过ArrayList是线程不安全的集合。今天学习线程安全的一个list集合。CopyOnWriteArrayList。 CopyOnWrite 从取名来看CopyOnWriteArrayList实质上就应该是个ArrayList。只是多了一个CopyOnWrite(写入时复制) 思想是计算机程序设计领域中的一种优化策略。其核心思想是,如果有多个调原创 2017-04-03 13:05:22 · 723 阅读 · 0 评论 -
JAVA多线程之——经典面试消费者与生产者
用wait与notify、notifyAll 实现生产者与消费者 关于多线程的生产者与消费者有多种方式实现。目前用学过的wait、notifyAll来实现。代码:public class ThreadTest6 { static class Storehouse { private int capacity; // 仓库的容量 private int siz原创 2017-03-26 15:23:32 · 5394 阅读 · 0 评论