定时器Timer的使用Timer类Timer类的主要作用是设置计划任务,即在指定时间开始执行某一个任务。 其构造方法如下 1234567public Timer() { this("Timer-" + serialNumber());}public Timer(boolean isDaemon) { this("Timer-" + serialNumber(), isDaemon);} 即可以自定义该定时器的名称。 其主要有四个方法: ...
Java多线程编程核心技术-4-Lock对象的使用
基本用法Java多线程可以使用synchronized关键字来实现线程间同步,不过JDK 1.5新增加的ReentrantLock类也能达到同样的效果,并且在扩展功能上更加强大,如具有嗅探锁定、多路分支通知等功能。 ReentrantLock类可以直接new一个ReentranLock。然后再后面的方法中使用该对象的方法来进行同步处理。 例如: 1private Lock lock = new ReentrantLock(); lock()方法lock方法用于锁定当前的ReentrantL...
Java多线程编程核心技术-3-线程间通信
wait/notify机制不使用wait/notify机制实现线程间通信 之前说过volatile可以实现不同线程的变量的可见性。所以不同线程间通信可以使用volatile变量来进行信息交换。 示例: 自定义List类: 123456789101112package mylist;import java.util.ArrayList;import java.util.List;public class MyList { volatile private List list ...
MySQL关键字问题
因为之前排查一个sql错误,看了半天才发现是关键字占用,但是作为属性又没有提示,所以这里记录以下MySQL的所有关键字。 本来一般的排查方案是将sql复制到UI工具中查看,但是有些UI工具提示并不全(可能是版本问题),比如groups关键字,SQLyog就不会提示。导致一直没有排查出来。 MySQL的关键分为占用或不占用。如果是占用的关键词,那么就不能直接使用。必须添加引号,注意这个引号是 ` ,即英文状态下的波浪号。其他的引号是无法做到消除占用的,包括单引号和双引号。 如果是不占用的...
反射获取私有数据问题
这里记录通过反射访问私有变量并赋值的方法。第一种是最普遍的,可以访问没有公开的私有变量。而后两种似乎有点多余,直接调用方法也行,权当记录一下后两种操作方法吧。 preUser对象 1234567891011121314151617181920212223242526272829303132333435363738package reflect;public class User { private int id; private String name; private Stri...
Java多线程编程核心技术-2-对象及变量的并发访问
在上一篇文章Java多线程编程核心技术-1-多线程技术基础中,提到了共享变量造成的非线程安全问题。 本文就是为了解决非线程安全的相关问题。 synchronized同步方法关键字synchronized可用来保障原子性、可见性和有序性。 但是在学习synchronized之前,我们必须明确一点: synchronized锁住的是对象。即使是synchronized方法。 线程安全问题和解决方案就像前一文中提到的,只有多线程共享的变量才会面临线程安全问题。 即定义在线程类中并且被多个实例化为...
Java多线程编程核心技术-1-多线程技术基础
使用多线程Java的JDK实现多线程编程主要有两种方式:一种是继承Thread类,另一种是实现Runnable接口。 继承Thread类直接继承Thread类,然后重写其run方法就可以得到一个新的线程类。 12345678public class MyThread extends Thread{ @override public void run(){ super.run(); System.out.println("M...
hibernate validator基本使用
引入Spring-bootspring-boot-starter-web就包含了hibernate validator。 1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency> spring MVC12345<de...
git常见场景与冲突处理
常见场景暂存区确认暂存区1234// 增加所有文件到暂存区$ git add .// 增加指定文件到暂存区$ git add [filename] 撤销暂存区12345// 取消所有最新的暂存区文件$ git reset HEAD .// 取消缓存区最新的指定文件$ git reset HEAD REAMDME.md 注意该命令的参数HEAD是要被恢复的版本, 一般选择HEAD, 即恢复到最新的HEAD。 下面撤销commit也使用该命令。 提交确认提交12// 进行一次提交并附加消息'm...
shiro、spring和JWT的集成
XML配置1. 配置web.xml 配置springShiro.xml文件读取 1234<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml classpath:springShiro.xml</param-value></context-param> ...