
Java多线程
luckykapok918
这个作者很懒,什么都没留下…
展开
-
Java多线程总结之线程安全队列Queue
在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。注:什么叫线程安全?这个首先要明确。线程安全的类 ,指的是类内共享的全局变量的访问原创 2012-12-10 15:17:26 · 705 阅读 · 0 评论 -
Java中的多线程简单介绍(带代码)
一、提要java中的多线程算是java中的一个 很大的难点 ,虽然 看了 很多书 ,相信对于 很多 接触 java不够 深的人来说 ,多线程永远都是心中的痛!今天我们 就 通过大量的 例子 来 彻底把它征服 .二、Runable接口实现 Runable接口 是 实现多线程 的 一种方法。看例子 package thread; public原创 2012-12-10 15:17:56 · 402 阅读 · 0 评论 -
Java多线程:线程状态
一. 线程状态类型1. 新建状态(New):新创建了一个线程对象。2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。3. 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。4. 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂转载 2014-03-29 22:00:40 · 564 阅读 · 0 评论 -
ThreadPoolExecutor线程池相关方法
ThreadPoolExecutor的构造函数说明: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit uni原创 2012-12-10 15:17:54 · 605 阅读 · 0 评论 -
ExecutorService线程池
原文地址:http://www.360doc.com/content/11/0908/11/7471983_146660376.shtml ExecutorService 建立多线程的步骤: 1。定义线程类 class Handler implements Runnable{} 2。建立ExecutorService线原创 2012-12-10 15:17:52 · 795 阅读 · 0 评论 -
ConcurrentLinkedQueue(无界队列) 的outofMemory错误解决方案
近期项目中碰到一个问题。 一个线程从MQ中取得数据,置于一个队列A(ConcurrentLinkedQueue类型)中,其它线程从A中取出数据进行处理。程序在低速运行时没有问题。在进行压力测试时,200万条数据以4000条/秒的速度进入A后,程序崩溃dump出core文件。 当时百思不得其解,经某大牛指点,可能是ConcurrentLinkedQueue没有对长度进行限制,原创 2012-12-10 15:17:49 · 1727 阅读 · 0 评论 -
探索 ConcurrentHashMap 高并发性的实现机制
原文地址:http://www.ibm.com/developerworks/cn/java/java-lo-concurrenthashmap/index.html 简介 ConcurrentHashMap 是 util.concurrent 包的重要成员。本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体实现机制。 由于 Conc原创 2012-12-10 15:17:45 · 466 阅读 · 0 评论 -
ConcurrentHashMap之实现细节
ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现。在这之前我对ConcurrentHashMap只有一些肤浅的理解,仅知道它采用了多个锁,大概也足够了。但是在经过一次惨痛的面试经历之后,我觉得必须深入研究它的实现。面试中被问到读是否要加锁,因为读写会发生冲突,我说必须要加锁,我和面试官也因此发生了冲突,结果可想而知。还是闲话少说,通过仔细阅读源代码原创 2012-12-10 15:17:43 · 346 阅读 · 0 评论 -
Java多线程总结之由synchronized说开去
这几天不断添加新内容,给个大概的提纲吧,方面朋友们阅读,各部分是用分割线隔开了的: synchronized与wait()/notify() JMM与synchronized ThreadLocal与synchronized ReentrantLock与synchronized 最重要一条: synchronized是针对对象的隐式锁使用的,注意是对象! 举个小例子,该例子没有原创 2012-12-10 15:17:41 · 391 阅读 · 0 评论 -
使用ConcurrentLinkedQueue尽量不用size()
服务端原本有个定时任务对一个集合ArrayList 中的消息做处理。 因为考虑到处理消息是先进先出原则,所以优化的时候考虑改用ConcurrentLinkedQueue 当时没仔细深入研究过这个集合就匆匆上线了。结果刚上线第二天就出问题了。服务端一次优化演变成了一个缺陷,还好及时回退了版本,后果才不是很严重。 回退后对ConcurrentLinkedQueue 做了一个简单的测试代码如下:原创 2012-12-10 15:17:32 · 1251 阅读 · 0 评论 -
BlockingQueue详解
本例介绍一个特殊的队列:BlockingQueue,如果BlockingQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒,同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状态,直到BlockingQueue里有空间时才会被唤醒继续操作。 本例再次实现前面介绍的篮子程序原创 2012-12-10 15:17:28 · 426 阅读 · 0 评论 -
Concurrent多线程控制
在Java 5.0之前启动一个任务是通过调用Thread类的start()方法来实现的,任务的提于交和执行是同时进行的,如果你想对任务的执行进行调度或是控制同时执行的线程数量就需要额外编写代码来完成。5.0里提供了一个新的任务执行架构使你可以轻松地调度和控制任务的执行,并且可以建立一个类似数据库连接池的线程池来执行任务。这个架构主要有三个接口和其相应的具体类组成。这三个接口是Executor, E原创 2012-12-10 15:18:00 · 372 阅读 · 0 评论 -
Callable与Future
java.util.concurrent.Callable与java.util.concurrent.Future类可以协助您完成Future模式。Future模式在请求发生时,会先产生一个Future对象给发出请求的客户。它的作用类似于代理(Proxy)对象,而同时所代理的真正目标对象的生成是由一个新的线程持续进行。真正的目标对象生成之后,将之设置到Future之中,而当客户端真正需要目标对象时原创 2012-12-10 15:17:58 · 339 阅读 · 0 评论