- 浏览: 188403 次
- 性别:
- 来自: 杭州
博客专栏
-
Java技术分享
浏览量:0
最新评论
-
masuweng:
学习了,学习了
mybatis是如何防止SQL注入的 -
somefuture:
终于知道了#$的区别
mybatis是如何防止SQL注入的 -
masuweng:
...
tomct处理请求的流程 -
zhp8341:
masuweng 写道寻求cas的更多例子, http://w ...
JUC之CAS -
臻是二哥:
java.util.concurrent包中到处都使用了CAS ...
JUC之CAS
文章列表
在JVM中,有三种默认的类加载器,分别为Bootstrap ClassLoader,Extension CLassLoader以及App ClassLoader。其中,Bootstrap Classloader用于加载JAVA的核心类库,Extension Classloader用于加载JAVA的扩展类库,而App ClassLoader则用于装载类路径中的用户自定义的类。
具体的流程如下:
//模板模式----实现编程式事务管理
abstract class TransactionTemplate{
public void transaction(){
beforeTransaction();
doInTransaction();
afterTransaction();
}
private void beforeTransaction(){
System.out.println("事务开始前");
}
private void afterTransaction(){
System.out.println ...
首先必须声明,在volatile出现之前,错误的DCL代码如下。在volatile出现之后,正确的DCL代码如下。代码如下:
//错误的代码
public class Singleton {
private static Singleton instance=null;
private Singleton(){}
public static Singleton getInstance(){
if(i ...
package com.xyz.connpool;
public interface IConnection {
/**
* 关闭当前连接
*/
public void close();
/**
* 销毁当前连接
*/
public void destroy();
//应该具备的其他方法
}
public class Connection implements IConnection {
private String name;
private IConnPool connPool;
public Connection(I ...
1 数据库事务的ACID属性
原子性(atomic)
对于中包含的操作,要么全部执行,要么全部不执行。
一致性(consistent)
事务在完成时,必须使所有的数据都保持一致状态。
隔离性(insulation)
当多个事务并发执行的时 ...
学习JVM之后,发现对常量池的理解又深入了一些。下面就从JVM的层面去理解JAVA程序中那些常见的语句。
读过笔者博客“JVM-类的生命周期“http://yizhenn.iteye.com/blog/2290619的读者都应该已经知道,JVM在加载class文件时经历了装载,连 ...
JVM-典型的垃圾收集器
- 博客分类:
- JVM
从前面的博客知道,类实例化产生的对象在堆区中存储,而堆区不可能无限大,因此需要有垃圾收集器。JVM的垃圾收集器干两件事:
1 碎片整理:整理内存碎片
2 垃圾回收:以某种算法发现垃圾,并使用某种算法清除垃圾。
JVM常见的垃圾发现算法包括引用计数和追踪。其中,引用计数就是为每个对象维护一个数字,这个数字记录了当前对象被引用的次数。当这个数字变为0的时候,说明该对象可以被垃圾回收了。但是引用计数无法发现那些循环引用的垃圾对象,比如垃圾对象a和垃圾对象b,两者互相引用,这个时候,虽然他们都是垃圾,但由于引用计算都是1,因此无法被发现。
此时,可以使用追踪算法,JVM会维护一个从根节点开始的对象引用 ...
在语言级别支持多线程是java语言的一大优势。之前的java并发系列博客中介绍了一些相关的基础知识。这里我们来看看java虚拟机对java多线程的支持。
JVM对多线程的支持有两种:
1 互斥:通过对象锁来实现
2 协同:通过Object类的wait,notify,notifyAll方法来实现
关于互斥:
我们讲过,在JVM的运行时数据区,方法区和堆区是被多有线程共享的,java栈和PC寄存器是线程独占的。因此我们需要考虑多线程访问方法区和堆区时的数据安全问题。方法区中的共享数据是类变量,堆区的共享数据是对象变量。(不懂看类的生命周期和对象的生命周期相关博客)
Java虚拟机会自动的为每 ...
当一个类型经历了装载,连接,初始化之后,就可以为这个类变量实例化一个对象了。在java中,一个类可以被显式或者隐式的实例化。
显式实例化有四种方法:
1 使用new操作符
2 调用java.lang.reflect.Constructor的newInstance方法
3 调用 ...
JVM-类型的生命周期
- 博客分类:
- JVM
类型的生命周期包括:装载,连接,初始化,卸载(和类装载器有关,不一定有)。
装载:将类的结构信息装载到内存中(这其中就包括很重要的角色--类的常量池,但是符号引用还没有解析),装载完毕之后会生成一个该类的Class对象。
连接:连接又包括验证,准备和解析。验证就是检验class文件语法等正确性。准备是为类变量分配内存并为他赋默认值。解析是将在装载阶段装载到内存中的常量池的符号引用解析为直接引用,这一步可以延后一直到类被首次主动使用的时候进行。关于首次主动使用,会在下文中说明。
初始化:初始化就是为类变量赋正确的值,在连接阶段,为类变量赋了默认的值,在这一步中,会将默认值修改为正确值。所谓正确值, ...
大家都知道,java号称一次编译,处处运行。之所以能够这么强大,jvm功不可没。直接上图:
笔者看过这张图很多次,一直没能理解。一直到最近,觉得能够明白到写博客了。一个java文件通过编译可以得到class文件,class文件就 ...
JAVA中有许多线程安全的基础模块类,一般情况下,这些基础模块类能满足我们需要的所有操作,但更多时候,他们并不能满足我们所有的需要。此时,我们需要想办法在不破坏已有的线程安全类的基础上添加一个新的原子操作。有如下4中方案:
1 修改类的源码,以添加新的原子操作
2 继承该线程安全类,并添加原子操作
3 使用客户端加锁方式
4 使用组合方式(推荐)
一般来讲,修改源码的方式不太可行,这样会破坏原有类的封装性而且有些时候,源码不可获得。我们从第二种方式开始举例:
假设现在对于类Vector,我们知道它是线程安全类。如果想为他添加一个“若没有则添加”方法,可是如下进行:
public class ...
不知道各位童鞋是否干过在程序主进程中嵌入IO操作这样“任性”的事情,笔者曾经干过,而且那时候还觉得自己很棒。没办法,那时候还年轻啊。后来随着学习的深入,知道了有nio这种神一样的东西。但如果有其他方案,至少 ...
网关服务器搭建
1. 网关服务器需要至少两张网卡,以eth0和eth1为例子
eth0:188.66.5.6/24 外网地址
eth1:192.168.1.1/24 内网地址
2. 在ubutu中,打开/etc/network/interfaces,在文件最后添加:
auto eth0
iface eth0 inet static
address 188.66.5.6
netmask 255.255.255.0
gateway 188.66.5.1
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 2 ...