- 浏览: 1248603 次
- 性别:
- 来自: 杭州
最新评论
-
jlotusYo:
博主,真感谢。
Java 密码扩展无限制权限策略文件 -
senninha:
这个。。是api说明吧。。
ScheduledExecutorService 源码分析 -
zoutao2008:
请问大文件如何处理?按你这种方式的话,文件超过200M时就会报 ...
hessian系列之二:上传文件 -
lwj1113:
lwj1113 写道谢谢博主这么细致的demo;在系列五中通过 ...
myBatis系列之五:与Spring3集成 -
lwj1113:
谢谢博主这么细致的demo;在系列五中通过testng测试类跑 ...
myBatis系列之五:与Spring3集成
文章列表
AtomicReferenceFieldUpdater位于java.util.concurrent.atomic包中,作用是原子性地更新对象属性。
以原子性更新Cat类的name属性为例:
name属性需要保持可见性,且不是私有变量。
class Cat {
volatile String name = "mycat";
}
1. 实例化Updater
调用AtomicReferenceFieldUpdater类的静态newUpdater方法实例化,传入需要原子性更新属性的Cat类、被更新属性类型为String,名称为name:
AtomicRefe ...
struts2是的配置文件是struts.xml,可以将Action的URL映射和结果放在该文件中,也可以通过Convention Plugin支持注解方式来配置URL映射和结果。
使用时需要把Convention Plugin添加到classpath中;如果是maven工程则添加依赖:
<dependency&g ...
Netty是一款基于Java NIO的框架,能够建立通道、
处理事件、编解码和异常处理等,为上层应用提供了清晰、简洁的开发接口:减少用户的编码和错误,使应用开发者能够把注意力集中在业务逻辑上。
下面以回显功能为例:
一、 ...
题目:
有两个文件context.txt和words.conf,请尝试将他们合并成为一段文字,并打印出来。
文件内容:
context.txt
“并不是每个人都需要$(qunar)自己的粮食,$(flight.1)每个人都需要做自己穿的$(flight.2),我们说着别人发明的$(hotel),使用别人发明的数学......我们一直在$(tuan)别人的成果。使用人类的已有经验和知识$(travel.1)来进行,是一件$(travel.2)的事情”
words.conf
flight=也不是:衣服
qunar=种植
hotel=语言
tuan=使用
travel=发 ...
Java中,i++和++i都不是原子操作,多线程环境下需要使用synchronized关键字。JDK1.5的java.util.concurrent.atomic包提供了原子操作类,通过Unsafe类调native方法来实现。
这里以AtomicInteger为例:
内部存储
维护了一个整型值,其初始值为0。考虑到多线程操作,使用volatile来保证其可见性:
private volatile int value;
单独赋值操作
通过构造函数设置:
public AtomicInteger(int initialValue) {
value = initial ...
AOP的配置稍显复杂,通过@Transactional注解,同样可以实现:
1. 在需要事务的类或方法上加@Transactional:
如果是类上加注解,该类的所有public方法都会应用事务
如果是方法上加注解,该方法会应用事务。
在接口上加注解有风险,如果使用CGLIB(类代理)将不会启用事务。
2. 开启注解事务开关:<tx:annotation-driven />
FruitShop实现:
public class AnnotationTxFruitShop extends JdbcDaoSupport implements FruitShop ...
Spring AOP通过在文件中配置来管理事务,好处是对代码侵入性小。
Spring AOP使用AspectJ表达式来定义切点,所以pom文件加入:
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.0</version>
</dependency>
FruitShop实现:
方法中除了使用继承自JdbcDaoSup ...
TransactionTemplate的灵活性好,可以给代码块加事务处理,而不是方法粒度的控制。
FruitShop实现:
public class TxTemplateJdbcFruitShop extends JdbcDaoSupport implements FruitShop {
private PlatformTransactionManager txManager;
public void setTxManager(PlatformTransactionManager txManager) {
this.txManager = txManager;
}
...
Spring的事务管理器接口:
public interface PlatformTransactionManager {
TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; // 获取事务状态
void commit(TransactionStatus status) throws TransactionException; // 提交事务
void rollback(TransactionStatus status) thro ...
本地事务即对一个数据源进行操作。大多数数据库支持事务。
先看没有事务的时候,导致的数据不一致问题。
准备数据:
-- MySQL
-- Create the database
DROP DATABASE IF EXISTS spring;
CREATE DATABASE spring
-- Drop three tables if exist
DROP TABLE IF EXISTS FRUIT;
DROP TABLE IF EXISTS FRUIT_STOCK;
DROP TABLE IF EXISTS ACCOUNT;
-- 水果表
CREATE TABLE ...
触发器的作用是在增、删、改操作之前(或之后)自动调用的SQL语句或存储过程。比如为了保持数据的一致性,删除订单记录时,触发删除订单详细记录。
1. 创建触发器:
DELIMITER $$ -- 结束符改为$$
CREATE TRIGGER trigger_name BEFORE|AFTER INSERT|UPDATE|DELETE ON table_name
[FOR EACH ROW]
BEGIN
commands;
END$$
DELIMITER ; -- 结束符改回;
注:一个触发器只能定义一个操作,如BEFORE INSERT, AFTER ...
有三张表:
学生表student(stu_id, name)
成绩表scores(stu_id, subject, score)
补考成绩表(stu_id, subject, score)
其中:
stu_id:ID
name:姓名
subject:课程
score:成绩
输出:
姓名、课程和成绩 (没有补考,以成绩表为准,有补考,以成绩表和补考成绩表的较大者为准)
1. 准备表和数据
这里以MySQL数据库为例
-- 创建学生表
CREATE ...
1. 强引用
指通过普通方式创建一个对象,并把这个对象赋给一个引用变量。只要还有引用变量指向,就不会被JVM回收,即使在内存不足时。
2. 软引用
通过SoftReference实现。
和强引用类似,区别是当内存不足时会被JVM回收。
...
扩展java.io.FilterInputStream,代表的是可放回输入流。用于根据特定字符来判断流类型或编码等。
1. 内部存储:
protected byte[] buf; // 缓冲区,从底层流获取数据
protected int pos; // 下一个要读取字节的位置
protected volatile InputStream in; // 底层流,继承自FilterInputStream
2. 构造函数:
public PushbackInputStream(InputStream in, int size) {
super(in);
if ( ...
和TCP的SocketChannel类似,UDP的DatagramChannel能充分利用NIO的优势。
服务端:Selector, DatagramChannel, ByteBuffer
客户端:DatagramChannel, ByteBuffer
区别:
a. 服务端没有与TCP的ServerSocketChannel相对应的Channel,服务端和客户端之间更趋于平等,不过服务端的端口号还是固定的。
b. Selector在处理完读取操作后,会触发写操作:发送数据到客户端。
1. 服务端
public class UDPEchoServerSelector {
...