Java
文章平均质量分 81
Java
三 丰
Everything will be okay in the end. If it's not okay, it's not the end.
展开
-
Thread类中的join()方法原理
join()是Thread类的一个方法。根据jdk文档的定义:public final void join()throws InterruptedException: Waits for this thread to die.join()方法的作用,是等待这个线程结束;但显然,这样的定义并不清晰。个人认为”Java 7 Concurrency Cookbook”的定义较为清晰:j...转载 2019-11-14 16:36:21 · 1181 阅读 · 2 评论 -
Java并发编程:阻塞队列
在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。 在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,转载 2016-07-15 10:57:00 · 480 阅读 · 0 评论 -
Java并发编程:深入剖析ThreadLocal
想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。以下是本文目录大纲:一.对ThreadLocal的理解二.深入解析ThreadLocal类三.ThreadLo转载 2016-07-14 11:08:05 · 469 阅读 · 0 评论 -
Log4J日志配置详解
一、Log4j简介Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。1、LoggersLoggers组件在此系统中被分为五个级别:DEBUG、INFO、WAR转载 2016-03-13 12:03:30 · 1016 阅读 · 0 评论 -
请慎用java的File#renameTo(File)方法
以前我一直以为File#renameTo(File)方法与OS下面的 move/mv 命令是相同的,可以达到改名、移动文件的目的。不过后来经常发现问题:File#renameTo(File)方法会返回失败(false),文件没有移动,又查不出原因,再后来干脆弃用该方法,自己实现一个copy方法,问题倒是再也没有出现过。昨天老板同学又遇到这个问题,File#renameTo(File)方转载 2016-03-08 10:50:19 · 14263 阅读 · 8 评论 -
Java异常处理机制
一、异常的概念和Java异常体系结构异常是程序运行过程中出现的错误。本文主要讲授的是Java语言的异常处理。Java语言的异常处理框架,是Java语言健壮性的一个重要体现。Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception。Java异常体...转载 2015-06-01 14:57:07 · 943 阅读 · 0 评论 -
Java 简单排序
一、冒泡排序package com.darren.test.sort;public class BubbleSortTest { public static void main(String[] args) { int[] array = new int[] { 3, 5, 9, 8, 6, 4, 3, 1, 8, 7 }; Sys原创 2014-10-27 21:44:26 · 677 阅读 · 0 评论 -
Java设计模式 - 模板方法模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。模板方法模式的结构 模板转载 2014-09-03 22:34:59 · 644 阅读 · 0 评论 -
Java设计模式 - 策略模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述策略(Strategy)模式的: 策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个转载 2014-09-22 20:52:09 · 672 阅读 · 0 评论 -
Java super.getClass() 陷阱
看到Java笔试题中有一道关于super的题,题目如下: 下面程序的输出结果是多少?import java.util.Date;public class Test extends Date{public static void main(String[] args) {new Test().test();} public void test(){System.out.println(super.原创 2014-09-13 14:57:46 · 1015 阅读 · 0 评论 -
Java sleep() 和 wait() 有什么区别
有人这样回答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。转载 2014-09-15 23:12:42 · 713 阅读 · 0 评论 -
生产消费线程讲解例子
publicclass ProducerConsumer { publicstatic void main(String[] args) { SyncStack ss = newSyncStack(); Producer p = newProducer(ss); Co原创 2014-09-02 22:02:50 · 817 阅读 · 0 评论 -
Java设计模式 - 适配器模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述适配器(Adapter)模式的:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式的用途用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极、阴极外,还有一个地极。而有些地方的电源插座却只有两极,没有地极。电源插座与笔记本电脑的电源插头不匹配使转载 2016-02-26 14:22:39 · 588 阅读 · 0 评论 -
Java并发编程之ConcurrentHashMap
ConcurrentHashMapConcurrentHashMap是一个线程安全的HashMap,它的主要功能是提供了一组和HashMap功能相同但是线程安全的方法。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,不用对整个ConcurrentHashMap加锁。ConcurrentHa转载 2016-07-07 10:29:16 · 447 阅读 · 0 评论 -
动态代理与静态代理区别
一、代理概念 为某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。 图1:代理模式 从图中可以看出,代理接口(Subject)、代理类(ProxySubject)、委托类(RealSubject)形成一个“品”...转载 2018-09-18 09:26:55 · 27395 阅读 · 7 评论 -
深入理解Java并发之synchronized实现原理
线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁,即能达到互斥访问目的的锁,也就是说当一个共享数据...转载 2018-06-08 19:08:11 · 304 阅读 · 0 评论 -
Java虚拟机:Metaspace
被废弃的持久代想起之前面试的时候有面试官问起过我一个问题:Java 8为什么要废弃持久代即Metaspace的作用。由于当时使用的Java 7且研究重心不在JVM上,一下没有回答上来,今天突然想起这个问题,就详细总结一下这个问题。首先我们看一张JVM内存布局的图:注意到里面有一块METHOD AREA,它是一块线程共享的对象,名为方法区,在HotSpot虚拟机中,这块METHOD AREA我们可以...转载 2018-04-26 18:59:59 · 563 阅读 · 0 评论 -
Java9 新特性
1、Java9新特性之---目录结构包含jdk8及以前的jdk版本,所有目录结构以及目录含义如图:jdk9之后,目录结构发生变化如图:这个新特性只要了解下就可以了,这个目录结构是方便为了接下来新特性做保证2、Java9新特性之---JShell工具怎么理解,怎么用呢?这个只是针对于java9来说,相当于cmd工具,你可以和cm转载 2018-02-28 13:41:01 · 358 阅读 · 1 评论 -
Java 8的新特性—终极版
前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级。在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java 8 – Lambdas and Concurrency、Java 8 Date Time API Tutorial : LocalDateTime和Abstract Class Ver转载 2018-02-28 11:38:08 · 285 阅读 · 0 评论 -
JAVA HashSet 去除重复值原理
Java中的set是一个不包含重复元素的集合,确切地说,是不包含e1.equals(e2)的元素对。Set中允许添加null。Set不能保证集合里元素的顺序。在往set中添加元素时,如果指定元素不存在,则添加成功。也就是说,如果set中不存在(e==null ? e1==null : e.queals(e1))的元素e1,则e1能添加到set中。下面以set的一个实现类HashSe转载 2015-01-04 20:19:21 · 35142 阅读 · 6 评论 -
Java 调用Restful API接口的几种方式--HTTPS
摘要:最近有一个需求,为客户提供一些Restful API 接口,QA使用postman进行测试,但是postman的测试接口与java调用的相似但并不相同,于是想自己写一个程序去测试Restful API接口,由于使用的是HTTPS,所以还要考虑到对于HTTPS的处理。由于我也是首次使用Java调用restful接口,所以还要研究一番,自然也是查阅了一些资料。分析:这个问题与模块之间的调用不原创 2017-06-20 10:29:37 · 53341 阅读 · 6 评论 -
正则表达式-如何匹配一对符号内的内容
摘要:以引号""为例来介绍如何使用正则匹配。例一:import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexTest { public static void main(String[] args) { String regEx = "\"(转载 2017-05-19 16:54:30 · 5275 阅读 · 0 评论 -
经典算法题
[题目1]:求长度为10000的整型数组的10个最大值。import java.util.PriorityQueue;public class ArrayTest { private static final int TOTAL = 10; public static void main(String[] args) { int[] array = {原创 2016-08-15 14:24:06 · 546 阅读 · 0 评论 -
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 以下是本文目录大纲: 一.CountDownLatch用法 二.CyclicBarrier用法 三.Semaphore用法转载 2016-08-22 10:47:31 · 523 阅读 · 1 评论 -
使用synchronized实现一个Lock
刚看到这个题目的时候无从下手,因为觉得synchronized和lock在加锁的方式上有很大不同,比如,看看正常情况下synchronized时如何加锁的。 方式一: public synchronized void a(){ //TODO } 方式二: public void b(){ synchro原创 2016-08-02 18:29:24 · 741 阅读 · 1 评论 -
java的动态代理机制详解
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理就是java的动态代理机制,所以本篇随笔就是对java的动态机制进行一个回顾。 在java的动态代理机制中,有两转载 2016-08-01 16:10:56 · 912 阅读 · 1 评论 -
Java 反射详解
本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解。下面开始正文。【案例1】通过一个对象获得完整的包名和类名?123456789101112131415package Refl转载 2014-03-21 20:19:12 · 482 阅读 · 0 评论 -
上传文件时报(文件名、目录名或卷标语法不正确)原因调查
举例说明:index.jsp page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>DOCTYPEhtml PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/lo原创 2013-07-18 22:15:33 · 8064 阅读 · 0 评论 -
格式转换工具类
package utils;import java.util.Calendar;import java.util.Date;import java.util.Random;import java.text.DecimalFormat;import java.text.ParseException;import java.text.SimpleDateFormat;imp原创 2012-11-01 22:22:27 · 674 阅读 · 0 评论 -
Java 链表
链表结点:package com.darren.test.datastructure;/** * 链表节点 * * @author Darren.Zhang */public class Link { private int value; private Link next; public Link(int value) { this.原创 2014-11-13 21:10:07 · 656 阅读 · 0 评论 -
Java 按字节数截取字符串
题目:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”转载 2014-09-25 20:55:59 · 858 阅读 · 0 评论 -
Java 统计字符个数和分离字符串
题目:一行文字包含中文、英文和数字,分离出转载 2014-09-25 21:02:02 · 1315 阅读 · 1 评论 -
Java 写一个单例模式(Singleton)出来
第一种:饱汉模式public class SingleTon { private SingleTon(){ } //实例化放在静态代码块里可提高程序的执行效率,但也可能更占用空间 private final static SingleTon instance = new SingleTon(); public static SingleTon getInstance(){转载 2014-09-25 21:41:08 · 26355 阅读 · 2 评论 -
java金额转中文大写
package test; import java.math.BigDecimal;import java.text.DecimalFormat; public class ChinaNumber { private static String[] CH = {"", "", "拾","佰","仟" }; private转载 2014-09-02 22:25:15 · 1030 阅读 · 0 评论 -
Java 文件换名拷贝
最近看了一道面试题,学习一下转载 2014-09-24 21:53:12 · 759 阅读 · 0 评论 -
Java stop()和suspend()方法为何不推荐使用
反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程转载 2014-09-15 23:18:58 · 2231 阅读 · 0 评论 -
JAVA cp 命令
java -cp .;c:\dir1\lib.jar Test -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;” 分隔,linux上是分号“:”分隔。不支持通配符,需要列出所有jar包,用一点“.”代表当前路径。 虽然现在都有eclipse之类的IDE了,但有时候后会手转载 2014-08-18 21:33:55 · 3655 阅读 · 0 评论 -
Java 文件内容合并
最近看到一道面试题,题目是这样描述的:转载 2014-09-23 21:12:25 · 904 阅读 · 0 评论 -
Vector 和 ArrayList去重
package com.darren.test.collection; import java.util.HashSet;import java.util.Set;import java.util.Vector; public class VectorTest { public static void main(String[] args) {原创 2014-09-20 20:42:41 · 2074 阅读 · 0 评论 -
Java 读取文件
public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。 */ public static void readFileByBytes(String fileName) { File file = new File(fileName); In转载 2014-04-08 20:10:24 · 545 阅读 · 0 评论