`
文章列表
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 { ...
Global site tag (gtag.js) - Google Analytics