HashMap 死循环的问题

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历过,本来觉得没什么好写的,因为Java的HashMap是非线程安全的,所以在并发下必然...

2015-07-10 10:03:23

阅读数 545

评论数 0

【多线程_提高】 synchronized VS lock

1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候      线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,      如果使用 synchronized ,如果A不释放,B将一直等下...

2015-05-15 10:49:37

阅读数 388

评论数 0

【多线程_提高篇】 线程的关闭

在之前的JDK版本中,线程的停止可以使用其自带的API,thread.stop、thread.suspend等;然后在之后就被废弃。原因可以看下我转载的blog:thread.stop被废弃的原因。 同时在那篇博客中提到了三种停止线程的方法: 1. 使用violate boolean变量来标识...

2015-05-15 09:05:37

阅读数 521

评论数 0

【多线程_提高篇】 thread.stop禁用的原因

为什么不能使用Thread.stop()方法? 从SUN的官方文档可以得知,调用Thread.stop()方法是不安全的,这是因为当调用Thread.stop()方法时,会发生下面两件事: 1. 即刻抛出ThreadDeath异常,在线程的run()方法内,任何一点都有可能抛出ThreadDeat...

2015-05-15 08:45:58

阅读数 2273

评论数 2

【多线程_并发工具】 信号量_Semaphore

信号量可以用来限制访问公共资源。在访问公共资源之前,线程必须从信号量获取许可。在访问资源之后,这个线程必须将许可返回给信号量. 主要方法: void acquire() 从此信号量获取一个许可,在提供一个许可前一直将线程阻塞,否则线程被中断。 void relea...

2015-05-06 21:36:50

阅读数 471

评论数 0

【多线程_提高】 Java中断机制

1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务。Java没有提供一种安全直接的方法来停止某个线程,但是Java提供了中断机制。 如果对Java中断没有一个全面的了解,可能会误以...

2015-04-28 15:04:59

阅读数 332

评论数 0

【多线程_并发工具】 栅栏_CyclicBarrier

栅栏:阻塞一组线程直到某个事件发生。 从概念理解起来,你可能会说:这不和闭锁一样吗? 栅栏和闭锁的最大区别就是: 所有线程必须同时到达栅栏位置,才能执行。 闭锁:用于等待时间。 栅栏:用于等待其他线程。 除此之外,闭锁是一次性对象,一旦进入终止状态,就不能重置。而栅栏可...

2015-04-27 16:54:54

阅读数 850

评论数 0

【多线程_生产者消费者队列】

就以alibaba的笔试题举例吧。 题目大概的意思如下: 有一个篮子,最多容纳5个苹果。有人一直往里放苹果。有人一直去苹果。写出实现。 ali要求不能用concurrent包里面的东西,所以只能用最简单的notify和wait。 如果可以用concurrent包里面的东西,还可以用bloc...

2015-04-27 10:30:16

阅读数 350

评论数 0

【多线程_basic】 wait/notify/notifyAll

转载请注明出处:http://blog.csdn.net/ns_code/article/details/17225469 在Java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信。在线程中调用wait()方...

2015-04-27 10:26:58

阅读数 275

评论数 0

【多线程_并发工具】 闭锁-CountDownLacth

主要的例子,参考自博客:http://blog.csdn.net/lmj623565791/article/details/26626391。 先看一个问题: 每天起早贪黑的上班,父母每天也要上班,话说今天定了个饭店,一家人一起吃个饭,通知大家下班去饭店集合。假设:3个人在不同的地方上...

2015-04-25 21:29:25

阅读数 735

评论数 0

【多线程_提高】 在现有的线程安全的类中添加功能

本节内容摘自《Java 并发编程实践》。 问题:向一个线程安全的类中添加一个线程安全的方法。 Solution1. 修改原始的类,在原始类中进行新的方法编写并且加上锁。 当我们无法修改原始的类,我们应该怎么办呢? Solution2. 扩展这个类。如果在设计的时候这个类考虑了可扩展性。比如...

2015-04-22 21:46:43

阅读数 824

评论数 0

Atom类源码分析

今天再看《Java并发编程实践》的时候提到了这样一句话:volatile关键字只能保证变量的可见性,无法保证变量的原子性。 当时没懂,搜了几个事例分析了一下,顺便也分析一下可以保证原子性的atom类的源码(这里以AtomInteger为例) 先看一下volatile无法保证原子性的事例...

2015-04-19 23:07:53

阅读数 1447

评论数 0

动态代理

最近在看AOP源码,先熟悉下JDK动态代理、Cglib、ASM相关的一些东西。 一.静态代理的缺点:      想想如果我们要用静态代理的方式去实现B中内的method(),我们应该如何做?      肯定是先将方法抽象到一个接口,代理类和B都去实现此接口,然后在代理类中有B的对象,在掉代理类...

2015-04-15 09:28:45

阅读数 337

评论数 0

ConcurrentHashMap实现分析

集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中...

2015-03-30 20:36:04

阅读数 413

评论数 0

Java中PriorityQueue

刷题的时候遇到了一个题要用到PriorityQueue,所以查查资料,以后备用。 定义: public class PriorityQueueextends AbstractQueueimplements Serializable 不同于传统的Queue,PriorityQueue并不是...

2015-03-27 23:38:11

阅读数 2797

评论数 0

Java多线程产生死锁的条件以及解决方法

摘自《Thinking in Java》: 死锁产生的原因: 1.互斥条件。任务使用的资源至少一个是不能共享的。 2.至少有一个任务它必须持有一个资源且正在等待获取一个当前被别的任务持有的资源。 3.资源不能被任务抢占。任务必须把资源释放当做普通事件。 4.必须有等待循环。 要发生死锁...

2015-03-26 02:01:41

阅读数 1595

评论数 0

Java序列化总结--基础篇

一.什么是Java序列化:          所谓的序列化就是说:将那些实现了Serializable接口的对象转化为一个字节序列,并以后能将这个字节序列完全的恢复为原来的对象。被序列化后的对象可以通过网络流传播、亦或是存入到本地的文件当中。实现对象的持久化。 二.序列化的实现: ...

2015-03-24 19:20:29

阅读数 722

评论数 0

ThreadLocal解析

作为防止线程在共享资源上产生冲突的第二种方法,本地线程,随便自己平常很少用,但是在各类框架:Spring、Struts2等却用的异常频繁。 先看《Thinking in Java》上的一个例子: public class ThreadLocalVariableHolder { //通过匿名内...

2015-03-11 23:04:46

阅读数 284

评论数 0

【多线程_basic】 Java多线程回顾与复习

好久没用多线程了,复习一下~~ 1.几种调用多线程的方式(部分源码摘自 《Thinking in Java》) ①:实现Runnable接口,见下面例子: class LiftOff implements Runnable{ protected int countDown=10; priv...

2015-03-11 09:42:12

阅读数 301

评论数 0

fail-fast机制问题

参考博客:http://blog.csdn.net/chenssy/article/details/38151189。 写的很详细了。

2015-03-10 00:15:19

阅读数 317

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭