在上一节提到的FileChannel中提供了lock()/tryLock()方法可以获得文件锁FileLock对象,从而锁定文件,这里的文件锁是进程级别的锁,而非线程锁。 lock()方法是阻塞试的,当调用该方法且无法得到文件锁,程序将一直阻塞。 tryLock()方法是非阻塞式的加锁方法,如果获得 ...
分类:
编程语言 时间:
2017-09-18 15:05:17
阅读次数:
226
需求背景 利用线程来模拟生产者和消费者模型 系统建模 这个系统涉及到三个角色,生产者,消费者,任务队列,三个角色之间的关系非常简单,生产者和消费者拥有一个任务队列的引用,生产者负责往队列中放置对象(id),消费者负责从队列中获取对象(id),其关联关系如下 方案1 因为是多线程操作,所以对任务的存取 ...
分类:
编程语言 时间:
2017-09-18 13:28:57
阅读次数:
278
锁概述mysql锁机制的特点:不同存储引擎支持不同的锁机制。MyISAM和MEMORY存储引擎支持表级锁;BDB存储引擎采用页面锁;InnoDB存储引擎支持行级锁。表级锁:开销小,加锁快,不会出现死锁,锁定粒度大,加锁冲突概率最高,并发度最低;适用于以查询为主,只有少量按索引条件更..
分类:
数据库 时间:
2017-09-17 18:51:03
阅读次数:
207
一、什么是事务事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml(数据操作语言,增删改,没有查询)语句要么全部成功,要么全部失败。如:网上转账就是典型的要用事务来处理,用于保证数据的一致性。 二、事务和锁当执行事务操作时(dml语句),oracle会在被作用的表上加锁,防止其它用户 ...
分类:
数据库 时间:
2017-09-14 14:50:17
阅读次数:
177
这篇文章主要介绍了mysql数据库锁的产生原因及解决办法,需要的朋友可以参考下 数据库和操作系统一样,是一个多用户使用的共享资源。当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并 ...
分类:
数据库 时间:
2017-09-14 10:36:40
阅读次数:
247
锁的作用:避免并发请求时对同一个数据对象同时修改,导致数据不一致。 怎么加锁: 1.事务T1在对某个数据对象R1操作之前,先向系统发出请求,对其加锁L1. 2.之后,事务T1对该数据对象R1有了相应的控制,在T1释放L1之前,其它事务不能修改R1. 锁类型: 1.排它锁(X)。 2.共享锁(S)。 ...
分类:
数据库 时间:
2017-09-14 00:34:21
阅读次数:
259
1.什么是协程 协程:是单线程下的并发,又称微线程,纤程。 协程是一种用户态的轻量级线程,协程是由用户程序自己控制调度的。 2.需要注意的点: 3.协程的特点如下: (1)必须在只有一个单线程里实现并发 (2)修改共享数据不需加锁 (3)用户程序里自己保存多个控制流的上下文栈 (4)附加:一个协程遇 ...
分类:
编程语言 时间:
2017-09-12 23:15:39
阅读次数:
210
一、何为单例模式 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。 实现某个类只有一个实例的途径: 1、让一个全局变量使得一个对象被访问,但是他不能防止外部实例化多个对象。 2、让类自身保存他的唯一实例,这个类可以保证没有其他实例可以被创建。 多线程时的单例模式:加锁-双重锁定 饿汉 ...
分类:
编程语言 时间:
2017-09-12 01:29:13
阅读次数:
243
前面写了list下arrlist和linkedlist的区别也就没有下文了,抽空总结一下map下的一些类。 一、概述 首先说一下三个map的介绍(treemap比较特殊,暂时忽略) 1、hashtable:数组+单链表结构、线程安全(操作加锁)、无序、 2、hashmap:数组+单链表结构、线程不安 ...
分类:
编程语言 时间:
2017-09-11 21:25:53
阅读次数:
199
一个最不可思议的MySQL死锁分析 死锁问题背景 做MySQL代码的深入分析也有些年头了,再加上自己10年左右的数据库内核研发经验,自认为对于MySQL/InnoDB的加锁实现了如指掌,正因如此,前段时间,还专门写了一篇洋洋洒洒的文章,专门分析MySQL的加锁实现细节:《MySQL加锁处理分析》。 ...
分类:
数据库 时间:
2017-09-11 10:28:34
阅读次数:
211