随笔分类 - Java并发
Java并发
摘要:前言 以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同
阅读全文
摘要:Why ThreadLocal? 无论如何,要编写一个多线程安全(Thread-safe)的程序是困难的,为了让线程共享资源,必须小心地对共享资源进行同步,同步带来一定的效能延迟,而另一方面,在处理同步的时候,又要注意对象的锁定与释放,避免产生死结,种种因素都使得编写多线程程序变得困难。 尝试从另一
阅读全文
摘要:ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现。在这之前我对ConcurrentHashMap只有一些肤浅的理解,仅知道它采用了多个锁,大概也足够了。但是在经过一次惨痛的面试经历之后,我觉得必须深入研究它的实现。面试中被问到读是否要加锁,因为读写会
阅读全文
摘要:简单介绍: 创建线程有两种方式:继承Thread或实现Runnable。Thread实现了Runnable接口,提供了一个空的run()方法,所以不论是继承Thread还是实现Runnable,都要有自己的run()方法。 一个线程创建后就存在,调用start()方法就开始运行(执行run()方法)
阅读全文
摘要:1.ConcurrentHashMap ConcurrentHashMap是线程安全的HashMap的实现。 1)添加 put(Object key , Object value) ConcurrentHashMap并没有采用synchronized进行控制,而是使用了ReentrantLock。
阅读全文
摘要:1.可重入锁 如果锁具备可重入性,则称作为可重入锁。像synchronized和ReentrantLock都是可重入锁,可重入性在我看来实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。举个简单的例子,当一个线程执行到某个synchronized方法时,比如说method1,而在m
阅读全文
摘要:一.Java中的ThreadPoolExecutor类 java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类, 因此如果要透彻地了解Java中的线程池,必须先了解这个类。 在ThreadPoolExecutor类中提供了四个构造方法: 从上面的代码
阅读全文
摘要:同步器是一些使线程能够等待另一个线程的对象,允许它们协调动作。最常用的同步器是CountDownLatch和Semaphore,不常用的是Barrier 和Exchanger1.CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 用给
阅读全文
摘要:transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下。 transient transient是类型修饰符,只能用来修饰字段。在对象序列化的过程中,标记为transient的变量不会被序列化。示例: class Test {
阅读全文
摘要:1.减少锁的竞争 我们看到串行化会损害可伸缩性,上下文切换回损害性能。竞争性的锁会同时导致这两种所示,所以减少锁的竞争讷讷狗狗改进性能和可伸缩性。 访问独占锁守护的资源是串行的——一次只能有一个行程访问它。当然,我们有很好的理由使用锁。 并发程序中,对可伸缩性首要的威胁是独占的资源锁。有两个原因影响
阅读全文
摘要:1.进程与线程 进程:资源分配的基本单位,是一个程序或者服务的基本单位。我们可以说进程就是程序的执行过程,这个过程包括很多东西, 如CPU执行时间、运行内存、数据等,而且是一个动态的过程。 线程:轻量级的进程,共享在父进程拥有的资源下,每个线程在父进程的环境中顺序的独立的执行一个活动。 总结: a>
阅读全文

浙公网安备 33010602011771号