Java 并发编程
xxc1605629895
这个作者很懒,什么都没留下…
展开
-
《Java 并发编程实战》读书笔记二:第2章 线程安全性
要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的(Shared)和可变的(Mutable)状态的访问。从非正式的意义上来说,对象的状态是指存储在状态变量(例如实例或静态域)中的数据。对象的状态可能包括其他依赖对象的域。例如,某个 HashMap 的状态不仅存储在 HashMap 对象本身,还存储在许多 Map.Entry 对象中。在对象的状态中包含了任何可能影响其外部可...原创 2018-06-21 12:49:38 · 308 阅读 · 0 评论 -
【线程】结果缓存实现(future与concurrenthashmap)
本文转自: 【线程】结果缓存实现(future与concurrenthashmap)Computable<A,V>接口中生命了一个函数Computable,其输入类型为A,输出类型为V,在ExpensiveFunction中实现的Computable,需要很长时间来计算结果,我们将创建一个Computable包装器,帮助记住之前的计算结果,并将缓存过程封装起来,(这项计算被称为“记...转载 2018-07-19 22:57:57 · 586 阅读 · 0 评论 -
Java Executor框架 (一)
Java Executor框架 (一)一,Java的Executor框架图片引用自:https://img-blog.csdn.net/201605091614570551. Executor 接口Executor 是一个用于提交 Runnable 任务。这个接口提供了一个将任务的提交从任务执行中解耦的方式,包含一些线程使用,调度等。Executor 接口只定义了一...原创 2018-07-28 21:29:14 · 415 阅读 · 0 评论 -
彻底理解Java的Future模式
本文转自:彻底理解Java的Future模式先上一个场景:假如你突然想做饭,但是没有厨具,也没有食材。网上购买厨具比较方便,食材去超市买更放心。实现分析:在快递员送厨具的期间,我们肯定不会闲着,可以去超市买食材。所以,在主线程里面另起一个子线程去网购厨具。但是,子线程执行的结果是要返回厨具的,而run方法是没有返回值的。所以,这才是难点,需要好好考虑一下。模拟代码1:publi...转载 2018-07-21 22:46:41 · 2685 阅读 · 0 评论 -
java并发编程之CompletionService
应用场景当向Executor提交多个任务并且希望获得它们在完成之后的结果,如果用FutureTask,可以循环获取task,并调用get方法去获取task执行结果,但是如果task还未完成,获取结果的线程将阻塞直到task完成,由于不知道哪个task优先执行完毕,使用这种方式效率不会很高。在jdk5时候提出接口CompletionService,它整合了Executor和BlockingQue...原创 2018-07-22 17:45:53 · 524 阅读 · 0 评论 -
Java Executors 使用
本文转自:Java Executor并发框架(一)整体介绍一、概述Java是天生就支持并发的语言,支持并发意味着多线程,线程的频繁创建在高并发及大数据量是非常消耗资源的,因为java提供了线程池。在jdk1.5以前的版本中,线程池的使用是及其简陋的,但是在JDK1.5后,有了很大的改善。JDK1.5之后加入了java.util.concurrent包,java.util.concurren...转载 2018-08-02 23:01:41 · 2897 阅读 · 0 评论 -
java命令--jstack 工具
本文转自:java命令–jstack 工具一、介绍jstack是java虚拟机自带的一种堆栈跟踪工具。jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项”-J-d64”,Windows的jstack使用方式只支持以下的这种方式:jstack [-l] pid主要分为两个功能: a. 针对活着...转载 2018-08-26 11:19:39 · 6020 阅读 · 0 评论 -
Java Thread 的使用
本文转自: Java Thread 的使用一、线程的状态在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状态,这个将会有助于后面对Thread类中的方法的理解。线程从创建到最终的消亡,要经历若干个状态。一般来说,线程包括以下这几个状态:创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、time waiting、waitin...转载 2018-07-16 21:23:52 · 158 阅读 · 0 评论 -
Java多线程学习之wait、notify/notifyAll 详解
本文转自:MoonGeek - Java多线程学习之wait、notify/notifyAll 详解1、wait()、notify/notifyAll() 方法是Object的本地final方法,无法被重写。2、wait()使当前线程阻塞,前提是 必须先获得锁,一般配合synchronized 关键字使用,即,一般在synchronized 同步代码块里使用 wait()、notify/n...转载 2018-07-16 21:29:23 · 764 阅读 · 0 评论 -
Java同步工具类
本文转自:https://blog.csdn.net/caoyue_new/article/details/75012794同步工具类可以是任意一个对象,只要它可以根据自身的状态来协调线程的控制流。阻塞队列可以作为同步工具类,其他类型的同步工具类还包括信号量(Semaphore)、栅栏(Barrier)以及闭锁。在平台类库中还包含一些其他同步工具类,如果还是不能满足需要,我们可以创建自己的同步...转载 2018-07-18 23:04:36 · 635 阅读 · 0 评论 -
Java 线程阻塞、中断及优雅退出
本文转自:Java 线程阻塞、中断及优雅退出线程阻塞一个线程进入阻塞状态的原因可能如下(已排除Deprecated方法):sleep()sleep()使当前线程进入停滞状态(阻塞当前线程),让出CUP的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会;当在一个Synchronized块中调用Sleep()方法是,线程虽然休眠了,但是对...转载 2018-07-18 20:39:44 · 2936 阅读 · 0 评论 -
《Java 并发编程实战》读书笔记一:第一章 并发简介
1.1 并发简史在早期的计算机中不包含操作系统,它们从头到尾只执行一个程序,并且这个程序能访问计算机中的所有资源。在这种裸机环境中,不仅很难编写和运行程序,而且每次只能运行一个程序,这对于昂贵并且稀有的计算机资源来说也是一种浪费。操作系统的出现使得计算机每次能运行多个程序,并且不同的程序都在单独的进程中运行,操作系统为各个独立执行的进程分配各种资源,包括内存,文件句柄以及安全证书等。如果需...原创 2018-06-21 12:49:11 · 207 阅读 · 0 评论 -
Java volatile关键字
本文转自:Java volatile关键字 当一个共享变量被volatile修饰时,它会保证修改的值立即被更新到主存“, 这里的”保证“ 是如何做到的?和 JIT的具体编译后的CPU指令相关吧? volatile特性 内存可见性:通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。 volatile的使...转载 2018-07-03 20:23:24 · 113 阅读 · 0 评论 -
Java并发编程--理解ThreadLocal
本文转自: Java并发编程–理解ThreadLocal&nbsp;另一篇博文: Hibernet中的ThreadLocal使用本文参考:http://blog.csdn.net/lufeng20/article/details/24314381http://www.cnblogs.com/chenying99/articles/3405161.htmlThreadLoca...转载 2018-07-03 20:54:10 · 172 阅读 · 0 评论 -
Java 线程安全性中的对象发布和逸出
Java 线程安全性中的对象发布和逸出“发布(Publish)” 一个对象的意思是指,使对象能够在当前作用域之外的代码中使用。例如,将一个指向该对象的引用保存到其他代码可以访问的地方,或者在某一个非私有的方法返回该引用,或者将引用传递到其他类的方法中。在许多情况中,我们要确保对象及其内部状态不被发布。而在某些情况下,我们又需要发布某个对象,但如果在发布时要确保线程安全性,则可能需要同步。当某个...原创 2018-07-03 20:58:30 · 927 阅读 · 1 评论 -
Java 并发编程 -- 对象的不变性和安全的发布对象
本文转自:Java 并发编程(二)对象的不变性和安全地发布对象一、不变性满足同步需求的另一种方法是使用不可变对象(Immutable Object)。到目前为止,我们介绍了许多与原子性和可见性相关的问题,例如得到失效数据,丢失更新操作或光查到某个对象处于不一致的状态等等,都与多线程视图同时访问同一个可变的状态相关。如果对象的状态不会改变,那么这些问题与复杂性也就自然消失了。如果某个对象...转载 2018-07-03 21:01:10 · 789 阅读 · 3 评论 -
java 集合之 Collections.UnmodifiableXXX 与 Collections.synchronizedXXX
java 中提供了一系列的创建不可变集合的方法 和 创建同步集合的方法。下面进行简单的介绍。一、UnmodifiableXXX 不可变集合1、 实现原理下面以 UnmodifiableList 为例来进行说明。 static class UnmodifiableList&lt;E&gt; extends UnmodifiableCollection&lt;E&gt; ...原创 2018-07-03 21:44:31 · 1950 阅读 · 0 评论 -
Java并发控制:ReentrantLock Condition使用详解
本文转自:hongdada - Java并发控制:ReentrantLock Condition使用详解生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。 其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者,用于从缓冲区中取出消息。 问题出现在当缓冲区已经满了,而此时生产者还想向其中...转载 2018-07-17 20:06:13 · 320 阅读 · 0 评论 -
Java并发编程:并发容器之CopyOnWriteArrayList
本文转自:Java并发编程:并发容器之CopyOnWriteArrayList原文链接:http://ifeve.com/java-copy-on-write/Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JD...转载 2018-07-17 20:20:47 · 149 阅读 · 0 评论 -
Java中的阻塞队列(BlockingQueue)
本文转自:Java中的阻塞队列(BlockingQueue)什么是阻塞队列阻塞队列(BlockingQueue)是 Java 5 并发新特性中的内容,阻塞队列的接口是 java.util.concurrent.BlockingQueue,它提供了两个附加操作:当队列中为空时,从队列中获取元素的操作将被阻塞;当队列满时,向队列中添加元素的操作将被阻塞。阻塞队列常用于生产者和消费者的场景,...转载 2018-07-17 22:28:09 · 2027 阅读 · 1 评论