在并发处理应用中,一般使用锁的方式来解决竞争问题,但锁的效率比较低,因此,在高并发处理中,无锁队列成为应用的需要。CAS无锁算法主要依赖于处理器的支持,绝大多数处理器都支持:
X86平台:CMPXCHG 汇编指令。
在一个指令周期内执行完成,因此是原子性的。
这一原理性操作过程如果采用C描述如下:
intcompare_and_swap (int* reg, int old...
分类:
其他好文 时间:
2014-08-21 19:32:34
阅读次数:
207
转:使用gdb调试多线程程序总结 一直对GDB多线程调试接触不多,最近因为工作有了一些接触,简单作点记录吧。 先介绍一下GDB多线程调试的基本命令。 info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的....
分类:
数据库 时间:
2014-08-18 10:35:23
阅读次数:
288
早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不...
分类:
其他好文 时间:
2014-08-14 13:38:28
阅读次数:
170
很简单,就是2个线程访问同一个程序集变量,如何防止冲突,几个简单的api就可以达到,异步访问
分类:
编程语言 时间:
2014-08-13 12:43:06
阅读次数:
237
很多核心Java面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework),理解核心线程概念时,娴熟的实际经验是必需的。这篇文章收集了Java线程方面一些典型的问题,这些问题经常被高级工程师所问到。0、Java中多线程同步是什么?在多线程程序下,同步...
分类:
编程语言 时间:
2014-08-12 18:53:44
阅读次数:
326
前言:
在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。
认识BlockingQueue
阻塞队列,顾名思义,首先它是一个队列,而一个...
分类:
其他好文 时间:
2014-08-08 18:13:36
阅读次数:
308
在多线程程序运行过程中,可能会涉及到两个或者多个线程试图同时访问同一个资源。为了防止这种情况的发生,必须在线程使用共享资源时给资源“上锁”,以阻挡其它线程的访问。而这种机制也常常被称为互斥量,本文主要介绍它的两种方式synchronized和Lock 。
1、synchronized
当任务要执行被synchronized关键字保护的代码片段的时候,它会检查锁是否可用,然后获取锁,执行代码,释...
分类:
编程语言 时间:
2014-07-31 17:11:30
阅读次数:
235
规则1 指定线程名 用于查看线程信息规则2使用Thread对象的setUncaughtExceptionHandler方法注册Runtime异常的处理者(v1.5+)说明:Java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的check...
分类:
编程语言 时间:
2014-07-30 23:26:05
阅读次数:
384
最近工作上需要做一个大数据量的读写操作,为了实现高效率,想到了用多线程实现。在网上查一些资料,发现在JDK1.5之后有了一个非常方便的东东---Executor来实现多线程。从JDK1.5开始,增加了java.util.concurrent包,它的引入大大简化了多线程程序的开发。java.util.concurrent..
分类:
编程语言 时间:
2014-07-28 03:05:41
阅读次数:
320
1 问题陈述
在开发中,遇到这样一个问题:
点击程序主窗体右上角的叉号关闭应用程序后,程序的进程却没有关闭。
通过查阅资料,了解到,产生此类问题的原因主要有以下两点:
1)程序中存在死循环。
2)程序为多线程程序,且在窗体关闭后,仍有线程在工作。
本文将针对此类问题,进行重现并提出解决方案。
2 场景再现
@场景1
新建Windows应用程序CloseWindowExp,程...