编写多线程程序往往是为了提高资源的利用率,或者提高程序的运行效率,或者更好地监控程序的运行过程等。多线程同步处理的目的是为了让多个线程协调地并发工作。对多线程进行同步处理可以通过同步方法和同步语句块实现。Java虚拟机是通过对资源(如内存)加锁的方式实现这两种同步方式。这种机制带来的另一个问题就是死 ...
分类:
编程语言 时间:
2016-09-25 15:49:00
阅读次数:
132
基本的封锁类型有两种:排它锁(X锁)和共享锁(S锁).所谓X锁,是事务T对数据A加上X锁时,只允许事务T读取和修改数据A,...所谓S锁,是事务T对数据A加上S锁时,其他事务只能再对数据A加S锁,而不能加X锁,直到T释放A上的S锁。
若事务T对数据对象A加了S锁,则T就可以对A进行读取,但不能进行..
分类:
数据库 时间:
2016-09-24 13:49:36
阅读次数:
249
1.多线程访问的共享资源存在线程安全问题, 无外乎访问两种共享资源。 1)多线程访问方法区数据。存在线程安全问题,通过加锁 2)多线程访问实例变量:被访问对象是单例时存在线程安全,被访问对象是多例时,是线程安全的。 来说说静态变量、实例变量、局部变量在多线程下的安全问题吧! (一)验证静态变量的线程 ...
分类:
编程语言 时间:
2016-09-22 17:00:03
阅读次数:
155
版本1:最简单的单例模式 方法二: 两点:1)保证所有构造函数不被外部所调用;2)利用属性或者方法调用对象。 缺点:无法保证线程的安全性,多个线程的情况下可能创建多个对象。 版本2:线程安全的单例模式 缺点:无论对象是否已经被创建,都要进行加锁,增加了不必要的开销。 版本3:Double-Check ...
第一次写博客,写的不好休怪哈。 版本1:最简单的单例模式 方法一: 方法二: 两点:1)保证所有构造函数不被外部所调用;2)利用属性或者方法调用对象。 缺点:无法保证线程的安全性,多个线程的情况下可能创建多个对象。 版本2:线程安全的单例模式 缺点:无论对象是否已经被创建,都要进行加锁,增加了不必要 ...
单例模式好多书上都是这么写的: 但是实际开发中是不会这么写的,因为有一个严重的问题,多线程并发访问的时候,可能会产生多个实例!! 下面列举几个常用的方法: 1.使用synchronized 关键字 2.加锁 3.利用静态变量: 以上就是常用的创建单例的模式: Test测试代码: 输出: 是同一个th ...
分类:
编程语言 时间:
2016-09-21 13:12:39
阅读次数:
185
1、悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无 ...
分类:
其他好文 时间:
2016-09-21 12:52:06
阅读次数:
144
这几天突然对协程感兴趣,于是自己实现了一个,代码放在github上:https://github.com/adinosaur/Coro 协程是一种用户空间的非抢占式线程,主要用来解决等待大量的IO操作的问题。 协程vs线程 对比使用多线程来解决IO阻塞任务,使用协程的好处是不用加锁,访问共享的数据不 ...
分类:
编程语言 时间:
2016-09-20 16:39:25
阅读次数:
210
本文来自:何登成的技术博客 一、背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要 ...
分类:
数据库 时间:
2016-09-17 14:53:59
阅读次数:
242
1.加锁缺点:降低性能优点:减少代码逻辑复杂度(题主现在这样超过1w条就删数据的逻辑,感觉看起来就点糟糕啊,如果整个系统一复杂,这样的来回写数据,你确定你的逻辑还维护得下去?建议题主梳理一下代码的逻辑流)2.队列(redis/各类mq等)缺点:引入其他组件,增加系统复杂度,降低稳定性。优点:能够将w ...
分类:
Web程序 时间:
2016-09-13 19:07:00
阅读次数:
142