并行编程
湉湉老爸
这个作者很懒,什么都没留下…
展开
-
java多线程之守护线程
最近重新研究Java基础知识,发现以前太多知识知识略略带过了,比较说Java的线程机制,在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) ,(PS:以前忽略了)。 估计学过Unix开发但是没有细致学习Java的同学们会疑惑了,操作系统里面是没有所谓的守护线程的概念,只有守护进程一说,但是Java语言机制是构建在JVM的基础之上的转载 2014-07-31 16:00:24 · 706 阅读 · 0 评论 -
Java线程(一):线程安全与不安全
作为一个Java web开发人员,很少也不需要去处理线程,因为服务器已经帮我们处理好了。记得大一刚学Java的时候,老师带着我们做了一个局域网聊天室,用到了AWT、Socket、多线程、I/O,编写的客户端和服务器,当时做出来很兴奋,回学校给同学们演示,感觉自己好NB,呵呵,扯远了。上次在百度开发者大会上看到一个提示语,自己写的代码,6个月不看也是别人的代码,自己学的知识也同样如此,学完的知识如果转载 2014-07-31 11:48:12 · 330 阅读 · 0 评论 -
Java线程(篇外篇):线程本地变量ThreadLocal
首先说明ThreadLocal存放的值是线程内共享的,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递,这样处理后,能够优雅的解决一些实际问题,比如Hibernate中的OpenSessionInView,就是使用ThreadLocal保存Session对象,还有我们经常用ThreadLocal存放Connection,代码如:[java] view pla转载 2014-07-31 11:46:03 · 342 阅读 · 0 评论 -
Java多线程之BlockingQueue
[java] view plaincopyprint?import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.转载 2014-07-31 10:35:57 · 314 阅读 · 0 评论 -
Java线程(二):线程同步synchronized和volatile
上篇通过一个简单的例子说明了线程安全与不安全,在例子中不安全的情况下输出的结果恰好是逐个递增的(其实是巧合,多运行几次,会产生不同的输出结果),为什么会产生这样的结果呢,因为建立的Count对象是线程共享的,一个线程改变了其成员变量num值,下一个线程正巧读到了修改后的num,所以会递增输出。 要说明线程同步问题首先要说明Java线程的两个特性,可见性和有序性。多个线程之间是转载 2014-07-31 11:50:21 · 412 阅读 · 0 评论 -
Java线程(篇外篇):阻塞队列BlockingQueue
好久没有写文章了,这段时间事情比较杂,工作也比较杂乱,上周日刚搬完家,从自建房搬到了楼房,提升了一层生活品质,哈哈!不过昨天晚上在公交车上钱包被偷了,前段时间还丢个自行车,不得不感叹,京城扒手真多,还无人处理。言归正传,这一段时间我的工作主要是改进公司的调度器,调度器调度线程池执行任务,生产者生产任务,消费者消费任务,那么这时就需要一个任务队列,生产者向队列里插入任务,消费者从队列里提取任务执行,转载 2014-07-31 11:47:13 · 375 阅读 · 0 评论 -
利用ScheduledThreadPoolExecutor定时执行任务
ScheduledThreadPoolExecutor是ThreadPoolExecutor的子类;JDK api里是这么说的:ThreadPoolExecutor,它可另行安排在给定的延迟后运行命令,或者定期执行命令。需要多个辅助线程时,或者要求 ThreadPoolExecutor 具有额外的灵活性或功能时,此类要优于 Timer。一旦启用已延迟的任务就执行转载 2014-07-31 10:50:47 · 581 阅读 · 0 评论 -
Java多线程之Callable接口的实现
[java] view plaincopyprint?import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurren转载 2014-07-31 10:34:26 · 322 阅读 · 0 评论 -
Java多线程之Semaphore
[java] view plaincopyprint?import java.util.ArrayList; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphor转载 2014-07-31 10:47:04 · 347 阅读 · 0 评论 -
Java线程(三):线程协作-生产者/消费者问题
上一篇讲述了线程的互斥(同步),但是在很多情况下,仅仅同步是不够的,还需要线程与线程协作(通信),生产者/消费者问题是一个经典的线程同步以及通信的案例。该问题描述了两个共享固定大小缓冲区的线程,即所谓的“生产者”和“消费者”在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加转载 2014-07-31 11:53:22 · 333 阅读 · 0 评论 -
Java线程(四):线程中断、线程让步、线程睡眠、线程合并
本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17560467,转载请注明。 最近在Review线程专栏,修改了诸多之前描述不够严谨的地方,凡是带有Review标记的文章都是修改过了。本篇文章是插进来的,因为原来没有写,现在来看传统线程描述的不太完整,所以就补上了。理解了线程同步和线程通信之后,再来看本文转载 2014-07-31 11:53:59 · 418 阅读 · 0 评论 -
Java的Lock小结
http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.htmlhttp://stackoverflow.com/questions/4934913/are-static-variables-shared-between-threads转载 2014-07-31 15:39:49 · 541 阅读 · 0 评论 -
Netty 5用户指南
原文地址:http://netty.io/wiki/user-guide-for-5.x.html 译者:光辉勇士 校对:郭蕾前言问题现如今我们使用通用的应用程序或者类库来实现系统之间地互相访问,比如我们经常使用一个HTTP客户端来从web服务器上获取信息,或者通过web service来执行一个远程的调用。然而,有时候一个通用的协议和他的实现并没有转载 2014-07-31 17:34:42 · 718 阅读 · 0 评论 -
JAVA IO 同步与异步、阻塞与非阻塞
前提 首先先强调上下文:下面提到了同步与异步、阻塞与非阻塞的概念都是在IO的场合下。它们在其它场合下有着不同的含义,比如操作系统中,通信技术上。 然后借鉴下《Unix网络编程卷》中的理论: IO操作中涉及的2个主要对象为程序进程、系统内核。以读操作为例,当一个IO读操作发生时,通常经历两个步骤: 1,等待数据准备 2,将数据从系统内核拷贝到操作转载 2014-07-31 18:56:08 · 773 阅读 · 0 评论 -
ReentrantLock 和 Synchronized
1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候 线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定, 如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断 如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间转载 2014-07-31 09:50:52 · 436 阅读 · 0 评论 -
Java线程(九):Condition-线程通信更高效的方式
接近一周没更新《Java线程》专栏了,主要是这周工作上比较忙,生活上也比较忙,呵呵,进入正题,上一篇讲述了并发包下的Lock,Lock可以更好的解决线程同步问题,使之更面向对象,并且ReadWriteLock在处理同步时更强大,那么同样,线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇之上,使用Lock如何处理线程通信。 那么引入本篇的主角,Condition,Con转载 2014-07-31 11:57:55 · 333 阅读 · 0 评论 -
Java线程(八):锁对象Lock-同步问题更完美的处理方式
Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我们拿Java线程(二)中的一个例子简单的实现一下和sychronized一样的效果,代码如下:[java] view plaincopypubl转载 2014-07-31 11:57:18 · 357 阅读 · 0 评论 -
Java线程(七):Callable和Future
接着上一篇继续并发包的学习,本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。 Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行转载 2014-07-31 11:54:03 · 368 阅读 · 0 评论 -
Java线程(六):线程池
自JDK5之后,Java推出了一个并发包,java.util.concurrent,在Java开发中,我们接触到了好多池的技术,String类的对象池、Integer的共享池、连接数据库的连接池、Struts1.3的对象池等等,池的最终目的都是节约资源,以更小的开销做更多的事情,从而提高性能。 我们的web项目都是部署在服务器上,浏览器端的每一个request就是一个线程,那转载 2014-07-31 11:55:33 · 364 阅读 · 0 评论 -
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue使用场景总结(待整理)
适用阻塞队列的好处:多线程操作共同的队列时不需要额外的同步,另外就是队列会自动平衡负载,即那边(生产与消费两边)处理快了就会被阻塞掉,从而减少两边的处理速度差距。当许多线程共享访问一个公共 collection 时,ConcurrentLinkedQueue 是一个恰当的选择。LinkedBlockingQueue 多用于任务队列ConcurrentLinkedQueu转载 2014-07-31 10:39:45 · 426 阅读 · 0 评论 -
Netty内存泄露
在测试中发现,当不停的开关Netty的NioClientSocketChannelFactory(比如大量连接失败重连等情况下),存在Direct Memory泄露。测试代码:Java代码 for (int i = 0; i ChannelFactory channelFactory = new NioClientSocketChannelFact转载 2014-07-31 10:38:52 · 887 阅读 · 0 评论 -
Java多线程之Condition接口的实现
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.co转载 2014-07-31 10:34:58 · 338 阅读 · 0 评论 -
消息中间件 MQ 企业级方案设计
细看 MQ 消息头(MQMD)的功能 MQMD 是每个消息都带有的消息头信息,它由若干字段组成,这些字段都是 MQ 设计人员根据总结的应用需求而设置的。应用程序构建消息时应该对这些字段填入恰当的值,对于没有填入的字段,MQ会用默认值填充。开发应用程序时,充分理解并利用这些字段是十分必要的,这里逐一为大家进行介绍,并针对每个字段指明它在实际编程中一般会用来实现什么样的功能: St转载 2014-07-07 23:01:06 · 1650 阅读 · 0 评论 -
InheritableThreadLocal
初识InheritableThreadLocal一直来只知道ThreadLocal,直到最近看slf4j MDC实现代码的时候,才认识了InheritableThreadLocal.InheritableThreadLocal顾名思义,可继承的ThreadLocal.看类描述:This class extends tt>ThreadLocaltt> to provide inh转载 2014-07-20 23:44:46 · 631 阅读 · 0 评论 -
Atomic:原子变量与原子类
一、何谓Atomic? Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位。计算机中的Atomic是指不能分割成若干部分的意思。如果一段代码被认为是Atomic,则表示这段代码在执行过程中,是不能被中断的。通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中断,直到其执行完成) 在x86 平台上,CPU提供了在指令执行期间对转载 2014-01-21 15:44:31 · 400 阅读 · 0 评论 -
再谈重入锁--ReentrantLock
重入锁(ReentrantLock)是一种递归无阻塞的同步机制。以前一直认为它是synchronized的简单替代,而且实现机制也不相差太远。不过最近实践过程中发现它们之间还是有着天壤之别。以下是官方说明:一个可重入的互斥锁定 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁定相同的一些基本行为和语义,但功能更强大。ReentrantLock 将由最近成转载 2014-01-21 15:46:05 · 455 阅读 · 0 评论 -
Java中正确使用Volatile变量
原文http://www.ibm.com/developerworks/cn/java/j-jtp06197.htmlJava 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了转载 2014-01-21 15:49:43 · 385 阅读 · 0 评论 -
ThreadLocal浅析
1.目的ThreadLocal目的是保存一些线程级别的全局变量,比如connection,或者事务上下文,避免这些值需要一直通过函数参数的方式一路传递。2. 常见用法[java] view plaincopypublic class Test2 { public static void main(String[] a转载 2014-01-21 22:10:24 · 393 阅读 · 0 评论 -
Java 中的悲观锁和乐观锁的实现
锁(locking) 业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算 处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓 的“锁”,即给我们选定的目标数据上锁,使其无法被其他程转载 2014-01-22 14:09:45 · 564 阅读 · 0 评论 -
Java中的ReentrantLock和synchronized两种锁定机制的对比
原文:http://www.ibm.com/developerworks/cn/java/j-jtp10264/index.html多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个 Thread 类,可以用它来构建、启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造转载 2014-01-21 15:47:21 · 375 阅读 · 0 评论 -
数据库事务隔离级别
本文系转载,原文地址:http://singo107.iteye.com/blog/1175084数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。√: 可能出现 ×: 不会出现转载 2014-07-29 21:08:33 · 348 阅读 · 0 评论 -
用Log4j实现线程独立日志
用Log4j实现线程独立日志 (2012-11-16 17:16:39)转载▼标签: log4j线程 log4j动态命名 log4j log4j进阶 it分类: 职业百科计算机需求: 在一个项目里,我使用Log4j生成日志,我不希望任务线程组各个转载 2014-07-28 17:20:22 · 1834 阅读 · 0 评论 -
Java多线程之CyclicBarrier
import java.util.Random; import java.util.concurrent.CyclicBarrier; /** * CyclicBarrier类似于CountDownLatch也是个计数器, * 不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数, * 当线程数达到了Cycl转载 2014-07-31 10:33:48 · 351 阅读 · 0 评论 -
Java多线程之Exchanger
import java.util.concurrent.Exchanger; /** * Exchanger让两个线程可以互换信息。 * 例子中服务生线程往空的杯子里倒水,顾客线程从装满水的杯子里喝水, * 然后通过Exchanger双方互换杯子,服务生接着往空杯子里倒水,顾客接着喝水, * 然后交换,如此周而复始。 */ public class转载 2014-07-31 10:32:45 · 329 阅读 · 0 评论 -
Java多线程之任务执行架构
[java] view plaincopyprint?import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.转载 2014-07-31 10:32:13 · 342 阅读 · 0 评论 -
Java线程专栏文章汇总
JDK5.0之前传统线程 Java线程(一):线程安全与不安全 Java线程(二):线程同步synchronized和volatile Java线程(三):线程协作-生产者/消费者问题 Java线程(四):线程中断、线程让步、线程睡眠、线程合并 Java线程(五):Timer和TimerTask转载 2014-07-31 11:58:35 · 379 阅读 · 0 评论 -
Java线程(五):Timer和TimerTask
Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。 Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。转载 2014-07-31 11:54:39 · 343 阅读 · 0 评论 -
Java多线程之CountDownLatch
import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * CountDownLatch是个计数器,它有一个初始数, * 等待这个计数器的线程必须等到计数转载 2014-07-31 10:31:58 · 271 阅读 · 0 评论 -
Oracle 死锁的检测查询及处理
Oracle 死锁的检测查询及处理-- 死锁查询语句SELECT bs.username "Blocking User", bs.username "DB User", ws.username "Waiting User", bs.SID "SID", ws.SID "WSID", bs.serial# "Serial#", bs.转载 2014-07-29 21:03:27 · 331 阅读 · 0 评论 -
Apache Mina 2.0.x 入门 (1)
在上篇 Blog 中,提到了 Apache Mina ,一个高性能 Java 异步并发网络通讯框架。利用 Mina 可以高效地完成以下任务:TCP/IP 和 UDP/IP 通讯串口通讯VM 间的管道通讯SSL/TLSJXM 集成IoC 容器集成( Spring 、 Pico 等)状态机Mina 的 API 当前主要有三个分支,分别是:2.0.x 目前处于 SVN tru转载 2014-07-29 15:17:23 · 480 阅读 · 0 评论