JDK
java小强
从今天起,站在架构的角度看问题
展开
-
一个Java时间工具类
主要包含了对时间操作的一些工具方法,仅供参考吧!源码如下:package com..util;import java.sql.Timestamp;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class DataUtil {...2010-12-19 11:11:06 · 82 阅读 · 0 评论 -
Condition 条件变量,线程通信更高效的方式
条件(也称为条件队列 或条件变量)为线程提供了一个含义,以便在某个状态条件现在可能为 true 的另一个线程通知它之前,一直挂起该线程(即让其“等待”)。因为访问此共享状态信息发生在不同的线程中,所以它必须受保护,因此要将某种形式的锁与该条件相关联。等待提供一个条件的主要属性是:以原子方式 释放相关的锁,并挂起当前线程,就像 Object.wait 做的那样 在Condition中,用...2014-02-19 11:46:36 · 101 阅读 · 0 评论 -
阻塞队列和阻塞栈
阻塞队列阻塞队列是Java5并发新特性中的内容,阻塞队列的接口是java.util.concurrent.BlockingQueue,它有多个实现类:ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue等,用法大同小异,具体可查看JDK文档,这里简单举例看下ArrayBl...2014-02-19 14:44:22 · 102 阅读 · 0 评论 -
Java四种线程池的使用
Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。newSin...2014-02-19 16:04:42 · 1535 阅读 · 1 评论 -
java中HashMap学习
什么是HashMapHashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表...2014-02-21 10:17:06 · 82 阅读 · 0 评论 -
Java中信号量 Semaphore
Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。自从5.0开始,jdk在java.util.concurrent包里提供了Semaphore 的官方实现,因此大家不需要自己去实现Semaphore。下面的类使用信号量控制对内容池的访问:import java.util.concurrent.Semaphore;class Pool { private...2014-02-21 11:34:43 · 132 阅读 · 0 评论 -
竞态条件与临界区
当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。导致竞态条件发生的代码区称作临界区。在临界区中使用适当的同步就可以避免竞态条件。界区实现方法有两种,一种是用synchronized,一种是用Lock显式锁实现。有临界区是为了让更多的其它线程能安全够访问资源。class Counter { protected long count = 0; public v...2014-02-21 11:46:48 · 470 阅读 · 0 评论 -
JAVA加密算法实现用例 消息摘要
一个消息摘要就是一个数据块的数字指纹。即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于 SHA1 是产生一个 20 字节的二进制数组)。消息摘要有两个基本属性:两个不同的报文难以生成相同的摘要难以对指定的摘要生成一个报文,而由该报文反推算出该指定的摘要代表:美国国家标准技术研究所的 SHA1 和麻省理工学院 Ronald Rivest 提出的 MD5 package t...2014-02-22 16:11:01 · 79 阅读 · 0 评论 -
JAVA加密算法实现用例 数字签名
所谓数字签名就是信息发送者用其私钥对从所传报文中提取出的特征数据(或称数字指纹)进行 RSA 算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵赖性),同时也确保信息报文在经签名后末被篡改(即完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。 在数字签名中有重要作用的数字指纹是通过一类特殊的散列函数(HASH 函数)生成的,对这些 HASH 函数的特殊要求是:...2014-02-22 16:15:13 · 150 阅读 · 0 评论 -
JAVA加密算法实现用例 密钥一致协议
密钥一致协议是由公开密钥密码体制的奠基人 Diffie 和 Hellman 所提出的一种思想。代表:指数密钥一致协议 (Exponential Key Agreement Protocol) 使用流程介绍:甲方构建密钥对,将公钥公布给乙方,将私钥保留;双方约定数据加密算法;乙方通过甲方公钥构建密钥对,将公钥公布给甲方,将私钥保留。甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,然...2014-02-22 16:36:01 · 187 阅读 · 0 评论 -
用Java信号量 解决死锁
死锁在多线程的情况下,在竞争竞态条件与临界区(http://cuisuqiang.iteye.com/blog/2020152)出现时,会出现数据不同步情况, 而为了避免这种情况,之前也说了:界区实现方法有两种,一种是用synchronized,一种是用Lock显式锁实现。而如果不恰当的使用了锁,且出现同时要锁多个对象时,会出现死锁情况,如下:package lockTest;im...2014-03-31 11:01:06 · 264 阅读 · 0 评论 -
优先级队列:PriorityQueue
PriorityQueue是从JDK1.5开始提供的新的数据结构接口,它是一种基于优先级堆的极大优先级队列。优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列(参阅 Comparable),也可以根据 Comparator 来指定,这取决于...2014-02-19 11:02:32 · 167 阅读 · 0 评论 -
Java replaceAll()方法报错Illegal group reference
replaceAll(regex, replacement)函数,由于第一个参数支持正则表达式,replacement中出现“$”,会按照$1$2的分组模式进行匹配。当编译器发现“$”后跟的不是整数的时候,就会抛出“非法的组引用”的异常。 例如,如下代码会报错:public class Test { public static void main(String[] args) ...2014-05-06 15:36:16 · 256 阅读 · 0 评论 -
Map基础知识引起的很纠结的问题
首先面临这样一段代码,根据注释代码的意思是根据childr筛选数据@SuppressWarnings("unchecked")public static List getList(String orgId, String userId,List child) { if (null == child || child.isEmpty()) return nul...原创 2011-02-25 21:04:18 · 115 阅读 · 0 评论 -
Java中通过反射获得对象的属性信息
先建立一个类,有四种属性:private int id;private String name;private byte by;private short st; 以下方法,创建一个对象,然后打印该对象的属性名字,属性值,和属性的类型:public class T { public static void main(String[] args) th...2012-05-04 17:58:06 · 195 阅读 · 0 评论 -
java InputStream读取数据问题
首先请查看一下JavaAPI,可以看到InputStream读取流有三个方法,分别为read(),read(byte[] b),read(byte[] b, int off, int len)。其中read()方法是一次读取一个字节,鬼都知道效率是非常低的。所以最好是使用后面两个方法。例如以下代码: /** * 读取流 * * @param inStream ...2012-03-01 16:02:22 · 1764 阅读 · 0 评论 -
InputStream,int,shot,long与byte数组之间的互相转换
没别的,直接上代码! package com.dst.util;import java.io.*;/** * 流操作工具类 * * @author 崔素强 */public class StreamTool { /** * @方法功能 InputStream 转为 byte * @param InputStream * @...2012-03-01 16:09:09 · 171 阅读 · 0 评论 -
ByteBuffer 到底怎么用?网络编程中一点总结!
做tcp网络编程,要解析一批批的数据,可是数据是通过Socket连接的InputStream一次次读取的,读取到的不是需要转换的对象,而是要直接根据字节流和协议来生成自己的数据对象。按照之前的编程思维,总是请求然后响应,当然Socket也是请求和响应,不过与单纯的请求响应是不同的。这里Socket连接往往是要保持住的,也就是长连接,然后设置一个缓冲区,网络流不断的追加到缓冲区。然后后台...2012-03-07 16:27:56 · 308 阅读 · 0 评论 -
ThreadLocal,静态变量,实例变量,局部变量的线程安全,回复:ByteBuffer 到底怎么用?网络编程中一点总结!...
之前都是业务层次开发,现在公司进行的网络编程,一下子要了解太多java底层的东西并进行应用,我现在边学习边应用。由于知识能力有限,在上次发博客时出现了一个小小的纰漏,而这个纰漏被细心的博友发现了。首先感谢你的关注,其次非常感谢你的建议和批评。其实上次博客中说道要线程安全的取得缓冲变量确实有安全取得某变量的意思,不过那个例子只是一个讲解Socket应用的小示例。如果真的要保证变量安全,使用静...2012-03-08 13:08:37 · 139 阅读 · 0 评论 -
Java中锁的应用之-Lock
这简直就是一场没有完的玩笑,自从ByteBuffer 到底怎么用?网络编程中一点总结!发出去以后,立马引起关于变量安全的讨论,而自从发布ThreadLocal,静态变量,实例变量,局部变量的线程安全,回复:ByteBuffer 到底怎么用?网络编程中一点总结!后,就开始了关于锁的讨论。我实在是跟不上脚步了。这就是一个基础知识引发的血案啊! 关于Lock的说明,我看大家看JDK就可以了。...2012-03-20 16:15:56 · 176 阅读 · 0 评论 -
Java中锁的应用之-ReadWriteLock
上面我们用儿子和父亲做了一个例子,儿子太猖狂了,花钱根本没有谱。下面我们再做一个例子,讲解ReadWriteLock的使用,例子和刚才差不多,但是又多了一个角色母亲,而且父母只负责监督,不再存钱。儿子每三秒都会去花钱一次,而父母每秒都在监督这个卡的使用情况。 所有 ReadWriteLock 实现都必须保证 writeLock 操作的内存同步效果也要保持与相关 readLock...2012-03-20 16:54:11 · 131 阅读 · 0 评论 -
Java新特性之-堵塞的队列和栈
做消息通信,消息会不断从网络流中取得,而后台也有线程不断消费。本来我一直是使用一些线程安全标识或方法来控制,后来在网上找到一些java新特性,里面包含了可以用到的堆栈使用,而且是堵塞的,这样至少可以保证一些安全性。 对于堆:BlockingQueue 不接受 null 元素。试图 add、put 或 offer 一个 null 元素时,某些实现会抛出 NullPointerExce...2012-03-20 17:27:46 · 148 阅读 · 0 评论 -
多线程访问 资源的安全控制
对于线程安全,大家都知道使用synchronized控制访问的资源,有变量安全、方法安全、块安全。我这里有个需求是这样的,我这里作为服务端有很多客户端与我进行交互,服务端也会主动发消息给客户端,但是要求每次交互时只能有一个用户。也就是说发送一组信息、等待信息、处理信息返回时这个链路只能有一个人使用。 也许大家马上会想到这样写:synchronized (ThreadT.devI...2013-02-01 16:17:29 · 134 阅读 · 0 评论 -
Java中图片压缩处理
整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享。首先,要压缩的图片格式不能说动态图片,你可以使用bmp、png、gif等,至于压缩质量,可以通过BufferedImage来指定。在C盘的temp下放置一张图片pic123.jpg,尽量找一个像素高一点的图片,这里我找了一张5616*3744的。 package test;import java.io.*;...2014-04-14 16:41:13 · 462 阅读 · 0 评论