java
文章平均质量分 77
abandon9527
我毕业于东北大学软件学院软件工程专业,热心于编码,愿做一开心的小码农
展开
-
0156 java中的WeakReference
Java语言中为对象的引用分为了四个级别,分别为 强引用 、软引用、弱引用、虚引用。本文只针对java中的弱引用进行一些分析,如有出入还请多指正。在分析弱引用之前,先阐述一个概念:什么是对象可到达和对象不可到达状态。其实很简单,我举个例子:现在有如下两个类class A class B,在JVM上生成他们两个类的实例分别为 instance a instanc转载 2017-05-09 14:23:45 · 392 阅读 · 0 评论 -
0093 再谈重入锁--ReentrantLock【进阶】
重入锁(ReentrantLock)是一种递归无阻塞的同步机制。以前一直认为它是synchronized的简单替代,而且实现机制也不相差太远。不过最近实践过程中发现它们之间还是有着天壤之别。以下是官方说明:一个可重入的互斥锁定 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁定相同的一些基本行为和语义,但功能更强大。ReentrantLock 将由最近成转载 2014-12-04 14:04:47 · 691 阅读 · 0 评论 -
0094 ThreadGroup和ExecutorService比较【进阶】
用java做抓取的时候免不了要用到多线程的了,因为要同时抓取多个网站或一条线程抓取一个网站的话实在太慢,而且有时一条线程抓取同一个网站的话也比较浪费CPU资源。要用到多线程的等方面,也就免不了对线程的控制或用到线程池。 我在做我们现在的那一个抓取框架的时候,就曾经用过java.util.concurrent.ExecutorService作为线程池,关于ExecutorService的使用代码转载 2014-12-04 14:08:33 · 337 阅读 · 0 评论 -
0096 远离陋习:Java内存管理的9个小技巧【基础】
本文将介绍几则Java内存管理的小技巧,让你告别陋习,为自己所编写的Java程序提速。 很多人都说“Java完了,只等着衰亡吧!”,为什么呢?最简单的的例子就是Java做的系统时非常占内存!一听到这样的话,一定会有不少人站出来为Java辩护,并举出一堆的性能测试报告来证明这一点。其实从理论上来讲Java做的系统并不比其他语言开发出来的系统更占用内存,那么为什么却有这么多理由来证明它确实占转载 2014-12-04 14:25:42 · 622 阅读 · 0 评论 -
0097 Java线程:CAS原子性【进阶】
前言 在Java并发包中有这样一个包,java.util.concurrent.atomic,该包是对Java部分数据类型的原子封装,在原有数据类型的基础上,提供了原子性的操作方法,保证了线程安全。下面以AtomicInteger为例,来看一下是如何实现的。[java] view plaincopypublic final int转载 2014-12-04 14:57:41 · 628 阅读 · 0 评论 -
0009 Java 线程的生命周期【基础】
前言:在java中每new一个线程,jvm都是向操作系统请求new一个本地线程,此时操作系统会使用剩余的内存空间来为线程分配内存,而不是使用jvm的内存。这样,当操作系统的可用内存越少,则jvm可用创建的新线程也就越少。生命周期:新建-就绪-(阻塞)-运行--死亡其中当用new 创建完一个线程对象后,该线程处于新建状态。注:线程只有通过new Thread来创建,此时才会开辟线原创 2014-12-04 13:51:58 · 530 阅读 · 0 评论 -
0095 ThreadGroup基本用法【进阶】
①定义线程组 ThreadGroup类中有 2个构造方法,它们用来定义线程组。这 2个构造方法的使用格 式如下: public ThreadGroup(String name); public ThreadGroup(ThreadGroup parent,String name); 比如,创建一个名为fruit的线程组k,可用如下语句: ThreadGr转载 2014-12-04 14:09:48 · 525 阅读 · 0 评论 -
0098 Java设计模式01--策略模式【进阶】
java设计模式之——策略模式 1,什么是策略模式?策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 2,策略模式有什么好处? 策略模式的好处在于你可以动态的改变对象的行为。 3,设计原则 设计原则是把一个类中经常改变或者将来可能改变的部分转载 2014-12-05 09:52:23 · 299 阅读 · 0 评论 -
0099 Java设计模式--策略模式Context的必要性【进阶】
本文探讨初学使用策略模式时遇到的一些疑惑,以及在工作中慢慢解决之前遇到的疑惑,借此与大家分享。比如说本文谈到策略模式中环境角色Context的用处,为什么一定要用,可不可以将此取消。这些都是在学习和工作的实践总结中慢慢体会到的。首先,我们来看下策略模式的概念。一般的解释如下: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于原创 2014-12-05 11:33:38 · 1480 阅读 · 1 评论 -
0027 Java线程的阻塞与唤醒【基础】
0027 求质数算法 空间换时间【基础】转载 2014-12-18 22:35:00 · 311 阅读 · 0 评论 -
0013 java运行内存分配图【原理】
Java的内存分配 Java程序运行时的内存结构分成:方法区、栈内存、堆内存、本地方法栈几种。方法区 存放装载的类数据信息,包括:基本信息:每个类的全限定名、每个类的直接超类的全限定名、该类是类还是接口、该类型的访问修饰符、直接超接口的全限定名的有序列表。每个已装载类的详细信息:运行时常量池、字段信息、方法信息、静态变量、到类classloader的引用、到类class的引用。原创 2014-12-18 22:26:59 · 552 阅读 · 1 评论 -
0025 Java 动态代理(反射的应用)【基础】
0025 Java 动态代理【基础】转载 2014-12-18 22:34:14 · 412 阅读 · 0 评论 -
0032 什么是java线程的中断【基础】
线程状态 Java虚拟机将线程运行过程分成四种状态 。 (1) New 新生;(2) Runnable 可运行;(3) Blocked 阻塞;(4) Dead 死亡。 值得注意的是: 线程的可运行状态并不代表线程一定在运行(runnable != running ) 。 大家都知道:所有现代桌面和服务器操作系统都使用了抢占式的线程调度策略 。 一旦线转载 2014-12-18 22:35:42 · 329 阅读 · 0 评论 -
0033 Java获取CPU利用率【入门】
0033 Java获取CPU利用率【精通】转载 2014-12-18 22:35:47 · 464 阅读 · 0 评论 -
0036 java NIO ServerSocketChannel原理(一)【底层】
1 NIO介绍 NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I /O通道后,read()将一直等待在端口一边读取字节内容,假如没有内容进来,read()也是傻傻的等,这会影响我们程序继续做其他事情,那么改进做法就是开设线程,让线程去等待,但是这样做也是相当耗费资源的。Java NIO非堵塞原创 2014-12-18 22:36:40 · 1602 阅读 · 1 评论 -
0037 Java NIO DatagramChannel(二)【底层】
Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。打开 DatagramChannel下面是 DatagramChannel 的打开方式:查看源代码打印帮助1DatagramChannel channel = Datag转载 2014-12-18 22:37:49 · 528 阅读 · 0 评论 -
0038 Java NIO Channel接口(三)【底层】
0038 Java NIO Channel接口(三)【底层】原创 2014-12-18 22:37:52 · 688 阅读 · 0 评论 -
0004 java中volatile关键字的含义【入门】
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。 synchronized 同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synchronized转载 2013-11-26 12:02:58 · 1431 阅读 · 0 评论 -
0106 单例模式的7种写发【基础】
第一种(懒汉,线程不安全): Java代码 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == nu转载 2015-01-30 09:59:36 · 366 阅读 · 0 评论 -
0092 Java线程:Condition-线程通信更高效的方式【进阶】
接近一周没更新《Java线程》专栏了,主要是这周工作上比较忙,生活上也比较忙,呵呵,进入正题,上一篇讲述了并发包下的Lock,Lock可以更好的解决线程同步问题,使之更面向对象,并且ReadWriteLock在处理同步时更强大,那么同样,线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇之上,使用Lock如何处理线程通信。 那么引入本篇的主角,Condition,Con转载 2014-12-08 09:31:59 · 447 阅读 · 0 评论 -
0108 SpringMVC与Struts2的对比【基础】
下面这些东西基本都是我从网上粘贴过来的,没有那么多耐心和时间一个字一个字的敲了,但是基本能表明我选择SpringMVC的思路和原因。把这张图放在这里,我是想说SpringMVC和Struts2真的是不一样的,虽然在都有着核心分发器等相同的功能组件(这些由MVC模式本身决定的)。 为什么SpringMVC会赢得最后的胜利呢?谈几点我自己的看法: 第转载 2015-02-09 10:41:34 · 472 阅读 · 0 评论 -
0113 JAVA架构师知识集 (收集到的)【架构】
转载 2015-02-13 15:12:50 · 324 阅读 · 0 评论 -
0124 WEB安全实战(三)XSS 攻击的防御【基础】
前言上篇文章中提到了 XSS 攻击,而且,也从几个方面介绍了 XSS 攻击带来的严重影响。那么,这篇文章中,主要是针对 XSS 攻击做一个基本的防御,看看可以通过几种方式来修复这个特别常见的安全漏洞。由于公司用的是 SpringMVC,因此,这次就主要基于 SpringMVC 来解决这些漏洞。当然,其实这些解决方案都是大同小异,对于什么环境来说根本无所谓。了解了原理,什么环转载 2015-09-09 18:58:09 · 429 阅读 · 0 评论 -
0024 java中String创建比较最详细解释【入门】
基础类型的变量以及字符串常量的“原子性”待写。。。原创 2014-06-09 23:01:56 · 398 阅读 · 1 评论 -
144 Linux使用jstat命令查看jvm的GC情况
Linux使用jstat命令查看jvm的GC情况http://www.open-open.com/lib/view/open1390916852007.htmlhttp://www.aiuxian.com/article/p-2032660.htmlhttp://blog.csdn.net/u011202334/article/details/51498原创 2016-08-13 16:31:55 · 870 阅读 · 1 评论 -
0157 JAVA利用HttpClient进行POST请求(HTTPS)
目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目用jQuery post进行请求。但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而JQuery的post请求是不允许跨域的。这时,就只能够用HttpClient包进行请求了,同时由于请求的URL是HTTPS的,为了避免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过转载 2017-05-17 17:11:27 · 373 阅读 · 0 评论 -
0102 Java设计模式02-代理模式【进阶】
1转载 2014-12-12 10:44:20 · 419 阅读 · 0 评论 -
0107 JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
jvm区域总体分两类,heap区和非heap区。heap区又分:Eden Space(伊甸园)、Survivor Space(幸存者区)、Tenured Gen(老年代-养老区)。 非heap区又分:Code Cache(代码缓存区)、Perm Gen(永久代)、Jvm Stack(java虚拟机栈)、Local Method Statck(本地方法栈)。HotSpot虚拟机GC算法采用分原创 2015-02-05 15:27:41 · 1366 阅读 · 1 评论 -
0091 Java线程:锁对象lock-同步问题更完美的处理方式【进阶】
Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我们拿Java线程(二)中的一个例子简单的实现一下和sychronized一样的效果,代码如下:[java] view plaincopypubl转载 2014-12-08 09:32:54 · 345 阅读 · 0 评论 -
0072 JAVA JNI 如何调用C或者C++生成的dll【基础】
JAVA如何调用C或者C++生成的dll本文为在 32 位 Windows 平台上实现 Java 本地方法调用dll的示例。由于对C语言不是很熟悉,有部分内容摘自网络。第一步、编写java文件package com.ztsoft.jni;public class MyDll {static {System.loadLibrary("MyDll");}public n转载 2014-12-08 09:49:00 · 582 阅读 · 0 评论 -
0101 什么是java future模式【转载】
什么是Future?用过Java并发包的朋友或许对Future (interface) 已经比较熟悉了,其实Future 本身是一种被广泛运用的并发设计模式,可在很大程度上简化需要数据流同步的并发应用开发。在一些领域语言(如Alice ML )中甚至直接于语法层面支持Future。这里就以java.util.concurrent.Future 为 例简单说一下F转载 2014-12-08 10:16:26 · 381 阅读 · 0 评论 -
0089 Java线程:Callable和Future【进阶】
接着上一篇继续并发包的学习,本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。 Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行转载 2014-12-08 09:34:38 · 360 阅读 · 0 评论 -
0090 Java线程:Timer和TimerTask【基础】
Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。 Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。转载 2014-12-08 09:35:05 · 761 阅读 · 0 评论 -
0100 Java中的Runnable、Callable、Future、FutureTask的区别与示例【进阶】
Java中存在Runnable、Callable、Future、FutureTask这几个与线程相关的类或者接口,在Java中也是比较重要的几个概念,我们通过下面的简单示例来了解一下它们的作用于区别。Runnable其中Runnable应该是我们最熟悉的接口,它只有一个run()函数,用于将耗时操作写在其中,该函数没有返回值。然后使用某个线程去执行该runnable即可实现多线程,转载 2014-12-08 09:40:31 · 419 阅读 · 0 评论 -
0104 Java设计模式03-动态代理(实战篇JDK和cglib)【进阶】
JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为转载 2014-12-12 16:01:22 · 502 阅读 · 0 评论 -
0103 Java设计模式03-动态代理(概念篇)【进阶】
动态代理作为代理模式的一种扩展形式,广泛应用于框架(尤其是基于AOP的框架)的设计与开发,本文将通过实例来讲解Java动态代理的实现过程。 友情提示:本文略有难度,读者需具备代理模式相关基础知识,。 通常情况下,代理模式中的每一个代理类在编译之后都会生成一个class文件,代理类所实现的接口和所代理的方法都被固定,这种代理被称之为静态代理(Sta转载 2014-12-12 10:58:49 · 431 阅读 · 0 评论 -
0023 java中的各种数据类型在内存中存储的方式 【入门】
1.java是如何管理内存的java的内存管理就是对象的分配和释放问题。(其中包括两部分)分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对象都在堆(Heap)中分配空间。释放:对象的释放是由垃圾回收机制决定和执行的,这样做确实简化了程序员的工作。但同时,它也加重了JVM的工作。因为,GC为了能够正确释放对象,GC必须监控原创 2014-12-18 22:32:49 · 592 阅读 · 0 评论 -
0019 Servlet容器的实现:单实例多线程的线程安全问题【基础】
Servlet容器默认采用单实例多线程的方式来处理请求,这样减少产生Servlet实例的开销,提升了对请求的响应时间,对于Tomcat可以在server.xml中通过元素设置线程池中线程的数目。这样实现的同时带来了多用户并发访问多线程安全问题。一. Servlet容器如何同时来处理多个请求 先说明几个概念: 工作者线程Work Thread:转载 2014-12-18 22:31:45 · 789 阅读 · 0 评论 -
0047 JAVA 类型后面三个点【基础】
0047 InputStream待写转载 2014-02-27 14:56:40 · 577 阅读 · 0 评论 -
0049 用jad对class文件进行(批量)反编译【基础】
0048 InputStream待写转载 2014-03-01 11:53:03 · 800 阅读 · 0 评论