![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 59
gary-liu
Like technology, like recording life. Since I went to a foreign company, I have to use English to quickly integrate it. WeChat Offical account: gary_foreign
展开
-
catalina 日志文件过大
需求最近应用上线后,发现tomcat的 catalina 文件越来越大,解决 catalina 日志文件过大cron定时任务清理清理脚本清理脚本,比如建个 cleanCatalina.sh, 内容如下,把日志的目录换成自己的就好#!/bin/bashecho " " > /xxx/tomcat/logs/catalina.outcron任务比如我写的是5分钟执行一次cro...原创 2019-10-21 23:22:17 · 842 阅读 · 0 评论 -
Java——transient and 序列化
序列化序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。 在网络传输过程中,可以是字节或是XML,json等格式。而字节的,XML,json编码格式可以还原完全相等的对象。这个相反的过程又称为反序列化。transientjava 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transie原创 2017-03-14 23:33:29 · 750 阅读 · 0 评论 -
Java——进程
进程进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位, 每个进程都有其自己的内存空间。Java中创建进程其实是创建了操作系统的一个进程,Java虚拟机本身就是一个进程,该进程创建了多个线程能够同时运行的条件。进程特征动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的;并发性:任何进程都可以同其他进程一起并发执行;独立性:进程是一个能独立运行的基本单原创 2017-03-15 20:47:45 · 1060 阅读 · 0 评论 -
Java——通过反射获取函数参数名称
通过javassit获取参见 http://blog.csdn.net/viviju1989/article/details/8529453 这篇文章的方法一,实现比较麻烦,就不说了。通过spring的LocalVariableTableParameterNameDiscovererpublic static List<String> getParamterName(Class clazz, Str原创 2017-04-30 22:53:28 · 21473 阅读 · 0 评论 -
Java——获取图片尺寸和大小
包括获取本地图片和远程服务器上的图片的尺寸和大小,这里分别使用 BufferedImage 和 ImageReader 来获取图片信息,ImageReader 是通过从图片源信息中获取图片信息,所以速度会更快。获取本地图片信息BufferedImagepublic static Map<String, Object> getImageInfo(String filePath) { lo原创 2017-04-30 23:20:51 · 14733 阅读 · 1 评论 -
Java——图片滚动显示
使用java swing,滚动显示图片示例。public class ImageScrollShow extends JFrame { public ImageScrollShow(){ setSize(800, 600); Container c = getContentPane(); Dimension displaySize = Toolk原创 2017-04-30 23:56:10 · 6013 阅读 · 0 评论 -
Java——GC(垃圾回收)
垃圾回收机制的意义C++程序员非常头疼的一个问题就是内存管理,而垃圾回收机制使得Java程序员不用关心内存动态分配和垃圾回收的问题,交由JVM去处理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。内存泄露是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构的一般情况下,Java 的内存泄露表现为一个原创 2016-10-05 14:36:09 · 1276 阅读 · 0 评论 -
线程执行顺序——CountDownLatch、CyclicBarrier 、join()、线程池
本文主要围绕一个问题展开:线程执行顺序,比如某个线程在其他线程并发执行完毕后最后执行。join介绍join()是Thread类的一个方法,join()方法的作用是等待这个线程结束。t.join()方法阻塞调用此方法的线程(calling thread),直到线程t完成,此线程再继续;通常用于在main()主线程内,等待其它线程完成再结束main()主线程。join实现Join方法实现是通过wait(原创 2017-03-10 00:02:22 · 3041 阅读 · 0 评论 -
Java多线程——生产者和消费者模式
生产者消费者模式生产者和消费者模式是一种并发设计模式,生产者消费者模式解决的是两者速率不一致而产生的阻抗不匹配,该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直原创 2017-03-18 01:42:19 · 2551 阅读 · 0 评论 -
Java——回调机制
按调用方式分为:同步调用:类A的方法a()调用类B的方法b(),一直等待b()方法执行完毕,a()方法继续往下走。这种调用方式适用于方法b()执行时间不长的情况,因为b()方法执行时间一长或者直接阻塞的话,a()方法的余下代码是无法执行下去的,这样会造成整个流程的阻塞。异步调用:类A的方法方法a()通过新起线程的方式调用类B的方法b(),代码接着直接往下执行。回调:包括同步回调和异步回调。类原创 2017-06-03 19:03:09 · 783 阅读 · 0 评论 -
Java锁——死锁
死锁死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。产生条件java 死锁产生的四个必要条件:1、互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用 2、不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。 3、请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资原创 2017-06-24 21:17:18 · 905 阅读 · 0 评论 -
Java多线程——获取多个线程任务执行完的时间
问题最近我在处理一批数据,用多线程来处理,我想知道大概多久能处理完。比如我先用多线程处理 100 条数据,统计下用时,然后根据总的数据量就可以大概估算出处理完这批数据要多久。使用 CountDownLatch 计时思路:用两个 CountDownLatch 倒计时锁:开始计时锁,任务结束计时锁。开始计时锁在子线程任务开始时通过 await() 阻塞所有子线程,然后在主线程中通过 CountDownL原创 2017-06-24 19:29:37 · 20653 阅读 · 2 评论 -
Java多线程——线程池
线程池线程池负责管理工作线程,包含一个等待执行的任务队列。线程池的任务队列是一个Runnable集合,工作线程负责从任务队列中取出并执行Runnable对象。Executor 框架便是 Java 5 中引入的,其内部使用了线程池机制,Executor 框架包括:线程池,Executor,Executors,ExecutorService,CompletionService,Future,Callab原创 2017-03-12 22:54:27 · 1271 阅读 · 0 评论 -
Fastjson定制属性的序列化和反序列化
问题序列化属性时,希望在属性值后加些说明将属性值中的时间戳 Timestamp 反序列化为Date 类型方法使用fastjson序列化时,可以在bean对象的属性上使用注解 @JSONField 做些序列化的规则,具体使用方法见参考资料。但有时候需要一些自定义化的序列化和反序列化方式,这时可以使用 serializeUsing 和 deserializeUsing 指定属性的序列...原创 2018-03-11 22:23:13 · 18946 阅读 · 0 评论 -
循环引用导致的json序列化失败
问题昨天在给系统加日志后,系统就一直报 Stack Overflow错误,找了很久才发现问题,引入的日志工具使用 gson序列化,而打印的日志对象里包含循环引用,导致出错。简单复现/** * ClassName: SerializeModel <br/> * Function: 循环引用序列化<br/> * 循环引用:包括自循环,如本类和A、B互相引用 (感觉都...原创 2018-09-23 16:26:06 · 2161 阅读 · 0 评论 -
itext 填充PDF表单
使用itext填充表单制作pdf,需要 itext 的jar包<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version...原创 2019-09-09 02:26:00 · 2953 阅读 · 0 评论 -
从fatjar中读取资源文件
需求传个模板文件到服务器上,读取这个模板文件做些事情做法将模板文件放到Java工程的资源文件目录里,然后将文件拷贝到服务器上的某个目录下,程序中用到的时候从该目录读取注意因为程序是打成fatjar后再服务器上运行的,所以不能像以前遍历资源目录的方式去读模板文件,需要使用流的方式读取文件代码import org.apache.commons.io.IOUtils;public S...原创 2019-09-29 14:02:48 · 835 阅读 · 0 评论 -
Java多线程——Semaphore
SemaphoreSemaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计原创 2017-03-14 02:32:10 · 817 阅读 · 0 评论 -
线程间协作——wait、notify、notifyAll
在 Java 中,可以通过配合调用 Object 对象的 wait() 方法和 notify()方法或 notifyAll() 方法来实现线程间的通信。在线程中调用 wait() 方法,将阻塞等待其他线程的通知(其他线程调用 notify() 方法或 notifyAll() 方法),在线程中调用 notify() 方法或 notifyAll() 方法,将通知其他线程从 wait() 方法处返回。wa原创 2017-03-14 00:58:56 · 847 阅读 · 0 评论 -
Base64简介
Base64编码介绍Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。比如三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。完整的base64定义可见RFC 1421和RFC 2045。编码后的数据比原始数据略长,为原来的4/3。所以当原有数据不是3字节的倍数时,会将二进制数据原创 2017-03-11 13:34:34 · 901 阅读 · 0 评论 -
java.lang.UnsupportedClassVersionError :Unsupported major.minor version 51.0
导入别人的工程后,运行出现这种错误,因为用jdk7编译的class文件放到基于jdk6运行在tomcat之中,就会报这个错。解决起来也很方便:打开exclipse中项目上的属性—java compiler–选择一个合适的版本后重新编译即可。具体步骤:项目------>右键------>属性------>Java Compiler------>Compiler Compliance Leve原创 2014-07-19 18:42:34 · 1321 阅读 · 0 评论 -
HashMap,LinkedHashMap,TreeMap的区别
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写Hash转载 2014-07-05 23:40:33 · 1185 阅读 · 0 评论 -
UML画图
这篇UML画图的文章写的挺好的http://blog.csdn.net/wzy_1988/article/details/9161819转载 2014-08-23 16:17:34 · 1287 阅读 · 0 评论 -
java虚拟机基础知识
JDK未来的功能规划:Lambda项目(Lambda表达式,函数式编程(函数式编程的优点是程序天然的适合并行运行))、Jigsaw项目(虚拟机模块化支持,但是业界其实再用OSGi ),动态语言支持(以后更流行混合式编程,Jython等,但是这方面还有很多不足,c++、Java是静态语言)运行时数据区域:程序计数器:java的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的。为原创 2014-08-12 23:03:48 · 1296 阅读 · 0 评论 -
Eclipse中常用快捷键
Eclipse中的一些常用快捷键,方便回顾。原创 2014-06-15 17:12:00 · 1210 阅读 · 0 评论 -
java 在dos窗口下运行命令
1.建立的文件名必须和类名一样2.定义一个类,写main函数3.将文件编译为字节码文件命令 javac Test.java4.运行文件命令 java Test原创 2015-09-21 23:33:34 · 1933 阅读 · 0 评论 -
Java native 关键字
Java native 关键字今天在看Thread类,启动线程用的 start()方法,该方法使线程开始执行,jvm 调用这个线程的run方法。(线程不能重复start),而 start()方法中又调用了 native start0()方法,该方法没有实现体,其实现体是由非java语言在外面实现的,JVM将控制调用本地方法的所有细节。Object 类中也有很多 native 方法。JNIJava N原创 2016-08-11 23:10:33 · 898 阅读 · 0 评论 -
Java 注解(Annotation)
什么是注解(Annotation): 注解是 Java 5 的一个新特性。注解是插入你代码中的一种注释或者说是一种元数据(meta data)。这些注解信息可以在编译期使用预编译工具进行处理(pre-compiler tools),也可以在运行期使用 Java 反射机制进行处理。(来自极客学院)注解作用生成文档。常用的有@see @param @return 等跟踪代码依赖性,实现替代配置文件原创 2016-06-21 00:03:04 · 800 阅读 · 0 评论 -
Java——Exception
异常情形是指阻止当前方法或者作用域继续执行的问题。比如用户输入了非法数据、要打开的文件不存在、网络通信时连接中断,或者JVM内存溢出等都可能导致异常。通过后面的异常类型和常见异常的介绍,可以知道产生的异常的原因有很多,有可能是用户不当的操作或者程序中的逻辑错误,也有可能是JVM等物理错误产生的。异常类型检查性异常最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存原创 2016-10-04 19:09:26 · 827 阅读 · 0 评论 -
使用 Grapicmagick 和 Im4java 处理图片
ImageMagick是个图片处理工具可以安装在绝大多数的平台上使用,Linux、Mac、Windows都没有问题。GraphicsMagick是在ImageMagick基础上的另一个项目,大大提高了图片处理的性能,在linux平台上,可以使用命令行的形式处理图片。Im4java 和Jmagick 都是开源社区为上面两个工具开发的 Java API,性能和方便度上im4java是更好的选择。JMag原创 2017-02-13 17:30:22 · 8685 阅读 · 3 评论 -
Java——main函数
Java 写了这么久,终于想了解下 main 函数了。main 函数作用在 java 中,main() 方法是 java 应用程序的入口方法。java虚拟机通过main方法找到需要启动的运行程序,并且检查main函数所在类是否被java虚拟机装载。如果没有装载,那么就装载该类,并且装载所有相关的其他类。因此程序在运行的时候,第一个执行的方法就是main()方法。通常情况下, 如果要运行一个类的方法,原创 2017-02-16 02:05:21 · 883 阅读 · 0 评论 -
Java——反射
什么是反射?反射(Reflection)能够让运行于 JVM 中的程序检测和修改运行时的行为。Class 类在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。虚拟机利用运行时信息选择相应的方法执行。可以通过专门的Java类访问这些信息,保存这些信息的类被称为 Class。 将 Class 类中的 forName 和 newInstance 配合使用,可以根据存储在字原创 2017-02-16 02:17:45 · 673 阅读 · 0 评论 -
Java多线程——守护线程
线程分类在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 作用Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收器),它就是一个很称职的守护者。区别User和Daemon两者几乎没有区别,唯一的不同之处就在于虚拟机的离开:如果 User Thread已经全部退出运行了,只剩下Daemon Thread存在了,原创 2017-02-16 02:30:29 · 878 阅读 · 0 评论 -
Java多线程——Callable、Future和FutureTask
通过Thread或Runnable创建的线程,都需要重写run方法,而run方法的返回是void的,所以使用这种方式无法获取线程执行结果。但java提供了其他类和方法来获取线程执行结果,主要的类有Callable、Future和FutureTask。CallableCallable是个泛型接口 Callable ,该接口中只有个call()方法,并且返回值也为 V,常和ExecutorService原创 2017-03-17 01:53:51 · 868 阅读 · 0 评论 -
Java多线程——线程
多线程编程的利弊其实我们的程序在运行的时候,CPU很多时候都是空闲的状态,因为程序不光有CPU调度,而大多数耗时的操作都在于IO上,因此要合理利用CPU的空闲时间,来提高程序的性能。多线程也会带来一些负面的东西,比如如何的解决并发带来的线程安全问题。这个问题很不好解决,一般解决线程安全常会用到同步,同步或者过多线程间上下文的切换又会带来性能的下降。进程和线程的关系进程是资源分配的基本单位,是一个程序原创 2017-03-16 21:56:44 · 764 阅读 · 0 评论 -
try catch finally语块中有return语句的各种情况
今天做了一道题,回来练了下感到很奇怪。记得try catch语块中有return语句,也要先执行finally中的代码,然后再返回(注意:返回之前保留的值)。 结果今天写了一下很出乎意料,对于基本类型,finally中改变变量值 不会影响try中的变量值;而对于对象或对象的成员变量则会影响,这应该就是值传递 和引用传递的区别。我说的可能不清楚,直接看下面的例子:原创 2014-05-15 19:36:54 · 2331 阅读 · 0 评论