乐观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想 … 继续阅读
分类目录归档:编程
MySQL事务的隔离级别
事务的隔离级别 隔离级别 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read) 未提交读(Read uncommitted) 可能 可能 可能 已提交读(Read committed) 不可能 可能 可能 可重复读(Repeatable read) 不可能 不可能 可能 可串行化(Serializable ) 不可能 不可能 不可能 未 … 继续阅读
设计一个LRU
最近看到一个LRU的讨论,挺赶兴趣的,看了一些文章。自己也手动实现了一个,关键是选择合适的数据结构,然后对这个数据结构进行CRUD。 Java里面实现LRU缓存通常有两种选择,一种是使用LinkedHashMap,一种是自己设计数据结构,使用链表+HashMap LRU释义 LRU 是 Least Recently Used 的简写,字面意思则是最近最少使用。 通常用于缓存的淘汰策略实现。 实现 … 继续阅读
Java并发-CopyOnWriteArrayList类
CopyOnWriteArrayList类 java.util.concurrent并发包里的CopyOnWriteArrayList工具类。当有多个线程可能同时遍历、修改某个公共数组时候,如果不希望因使用synchronize关键字锁住整个数组而影响性能,可以考虑使用CopyOnWriteArrayList。 如果简单的使用读写锁的话,在写锁被获取之后,读写线程被阻塞,只有当写锁被释放后读线程才 … 继续阅读
linux几个解压命令
压缩的方式也是有好几种,常用的有下面这三种: gzip bzip2 tar 常用的压缩的命令就有: gzip filename bzip2 filename tar -czvf filename 常用的解压命令有: gzip -d filename.gz bzip2 -d filename.bz2 tar -xzvf filename.tar.gz (完)
分页优化
优化分页limit 通常我们在分页的时候,通常使用的是limit 50, 10这种语句。数据少还不错,但是当数据偏移量非常大的时候,性能就会出现问题,例如select xx,xxx from test_table limit 100000020, 20。扫描了100000020条数据,才返回20条数据。 这个时候我们可以用一下两种方式来优化: 利用between and和主键索引 利用主键自增id … 继续阅读