前两篇介绍了一些Java并发的基础知识,博主正巧遇到一种需求:查询数据库,根据查询结果集修改数据库记录,但整个流程是做成了一个schedule的,并且查询比较耗时,并且需要每两分钟执行一次,cpu经常因等待服务器响应的查询结果而进入等待,故需要在此基础上考虑性能优化,sql优化可以提高一些系统效率,同样,多线程也可以... 下面博主做个DEMO引出一些Java并发的实际应用场景: import java.util.ArrayList; import java.util.List; import…
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所以JDK 最好下载 JDK 9以上的版本. 81. 优先使用并发实用程序替代wait和notify 本书的第一版专门用一个条目来介绍正确使用wait和notify方法[Bloch01,Item 50]. 它的建议仍然有效,并在本条目末尾进行了总结,但这个建议远不如以前那么重要了. 这是因为没有太多理…
阻塞队列与非阻塞队 阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素.同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从队列中移除一个或者多个元素,或者完全清空队列. 1.ArrayDeque, (数组双端队列)  2.PriorityQueue, (优先级队列)  3.Concur…
AsyncTask是Android给开发者提供的一个简单轻量级的多线程类,通过它我们可以很容易新建一个线程让在后台做一些耗时的操作(如IO操作.网络访问等),并在这个过程中更新UI.之所以说它轻量级,是因为不需要直接使用Handler.Thread等知识,使用起来比较简单,但也失去了一些灵活性,对于一些复杂的场景处理起来不方便. 如果一个APP进程中同时只创建和运行一个AsyncTask实例,则不会有任何问题.但如果在一个进程中如果有多个AsyncTask任务同时在执行,问题就比较复杂了.下面我…
JVM运行时内存结构回顾 在JVM相关的介绍中,有说到JAVA运行时的内存结构,简单回顾下 整体结构如下图所示,大致分为五大块 而对于方法区中的数据,是属于所有线程共享的数据结构 而对于虚拟机栈中数据结构,则是线程独有的,被保存在线程私有的内存空间中,所以这部分数据不涉及线程安全的问题 不管是堆还是栈,他们都是保存在主内存中的 线程堆栈包含正在执行的每个方法的所有局部变量(调用堆栈上的所有方法).线程只能访问它自己的线程堆栈. 由线程创建的局部变量对于创建它的线程以外的所有其他线程是不可见的.…
本文转载自互联网,侵删   序言 先来看如下这个简单的Java类,该类中并没有使用任何的同步. 01 final class SetCheck { 02 private int  a = 0; 03 private long b = 0; 04   05 void set() { 06 a =  1; 07 b = -1; 08 } 09   10 boolean check() { 11 return ((b ==  0) || 12 (b == -1 && a == 1)); 13 }…
转自:http://www.importnew.com/11345.html 我只是喜欢新鲜的事物,而Java 8 有很多新东西.这次我想讨论其中我最喜欢的之一:并发加法器.这是一个新的类集合,他们用来管理被多线程读写的计数器.这个新的API在显著提升性能同时,仍然保持了简单直接的特点. 多核架构到来之后人们就解决着并发计数器,让我们来看看到现在为止Java提供了哪些解决并发计数器的选项,并对比一下他们与新API的性能. 脏计数器 – 这种方法意味着一个常规对象或静态属性正在被多线程读写.不幸的…
同步容器类 早期版本的JDK提供的同步容器类为Vector和Hashtable,JDK1.2 提供了Collections.synchronizedXxx等工程方法,将普通的容器继续包装.对每个共有方法都进行同步. Collection类中提供了多个synchronizedXxx方法,该方法返回指定集合对象对应的同步对象.synchronizedXxx方法本质是对相应容器的包装. 例:使用Collections类获得同步容器. public static void main(String[] a…
前言 在Java中,线程是一个很关键的名词,也是很高频使用的一种资源.那么它的概念是什么呢,是如何定义的,用法又有哪些呢?为何说Android里只有一个主线程呢,什么是工作线程呢.线程又存在并发,并发机制的原理是什么.这些内容有些了解,有些又不是很清楚,所以有必要通过一篇文章的梳理,弄清其中的来龙去脉,为了之后的开发过程中提供更好的支持. 目录 线程定义 Java线程生命周期 线程用法 Android中的线程 工作线程 使用AsyncTask 什么是并发 并发机制原理 并发具体怎么用 线程定义…
Java进阶7并发优化4——JDK并发数据结构20131114 由于并发程序和串行程序的不同特点,在串行程序中使用的数据结构可能无法在并行程序中直接的正常使用,因为这些数据结构可能不是线程安全的,所以这一次并发程序的优化介绍的是并发程序中的数据结构,比如并发List,并发Set,并发Map等. 1.并发List Vector实现的List接口,CopyOnWriteArrayList也是实现的List接口,这两个List的实现是线程安全的,但是对于ArrayList不是线程安全的,所以在多线程中…