
java多线程
andy2cloud
这个作者很懒,什么都没留下…
展开
-
Java多线程-工具篇-BlockingQueue
在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起的作转载 2017-05-26 11:01:56 · 253 阅读 · 0 评论 -
Spring中@Async用法详解及简单实例
Spring中@Async用法引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring 3.x之后,就已经内置了@Async来完美解决这个问题,本文将完成介绍@Async的用法。1. 何为异步调用? 在解释异步调用之前,我们先来看转载 2017-11-25 14:02:37 · 11223 阅读 · 0 评论 -
Java并发编程:深入剖析ThreadLocal
Java并发编程:深入剖析ThreadLocal 想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。 以下是本文目录大纲: 一.对ThreadLocal的理解转载 2017-11-28 09:45:18 · 213 阅读 · 0 评论 -
AtomicInteger类和int原生类型自增鲜明的对比
AtomicInteger这个类的存在是为了满足在高并发的情况下,原生的整形数值自增线程不安全的问题。比如说 int i = 0 ; i++;12上面的写法是线程不安全的。 有的人可能会说了,可以使用synchronized关键字啊。 但是这里笔者要说的是,使用了synchronized去做同步的话系统的性能将会大大下降。 所以此时AtomicInteger这转载 2018-02-14 10:17:56 · 510 阅读 · 0 评论 -
java condition使用及分析
背景: 上一篇文章基于object的wait、notify实现了生产者、消费者模式。本篇文章继续梳理Condition。condition 介绍及demo Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition的await()、signal()...转载 2018-02-24 14:26:35 · 23470 阅读 · 0 评论 -
java并发等待条件的实现原理(Condition)
前言前面介绍了排它锁,共享锁的实现机制,本篇继续学习AQS中的另外一个内容-Condition。想必学过java的都知道Object.wait和Object.notify,同时也应该知晓这两个方法的使用离不开synchronized关键字。synchronized是jvm级别提供的同步原语,它的实现机制隐藏在jvm实现中。作为Lock系列功能中的Condition,就是用来实现类似 Object....转载 2018-02-24 16:43:23 · 870 阅读 · 0 评论 -
java多线程系列(四)---ReentrantLock的使用
java多线程系列(四)---ReentrantLock的使用Lock的使用前言:本系列将从零开始讲解java多线程相关的技术,内容参考于《java多线程核心技术》与《java并发编程实战》等相关资料,希望站在巨人的肩膀上,再通过我的理解能让知识更加简单易懂。目录认识cpu、核心与线程java多线程系列(一)之java多线程技能java多线程系列(二)之对象变量的并发访问java多线程系列(三)之...转载 2018-02-24 19:42:18 · 1105 阅读 · 0 评论 -
处理 InterruptedException
Java 理论与实践处理 InterruptedException捕捉到它,然后怎么处理它?Brian Goetz2006 年 6 月 15 日发布WeiboGoogle+用电子邮件发送本页面 2系列内容:此内容是该系列的一部分:Java 理论与实践这样的情景您也许并不陌生:您在编写一个测试程序,程序需要暂停一段时间,于是调用Thread.sleep()。但是编译器或 IDE 报错说没有处理检查到...转载 2018-04-10 09:31:34 · 319 阅读 · 0 评论 -
Linux下区分物理CPU、逻辑CPU和CPU核数
㈠ 概念 ① 物理CPU 实际Server中插槽上的CPU个数 物理cpu数量,可以数不重复的 physical id 有几个 ② 逻辑CPU Linux用户对 /proc/cpuinfo 这个文件肯...转载 2018-04-20 14:28:09 · 640 阅读 · 0 评论 -
ReenTrantLock可重入锁和synchronized的区别总结
ReenTrantLock可重入锁(和synchronized的区别)总结可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。 锁的实现:Synchronized是依赖于JVM实现的...转载 2018-09-04 17:47:00 · 634 阅读 · 0 评论 -
java中的sleep()和wait()的区别
对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等转载 2017-08-05 11:53:21 · 214 阅读 · 0 评论 -
并发队列 – 无界阻塞队列 LinkedBlockingQueue 原理探究
一、前言前面介绍了使用CAS实现的非阻塞队列ConcurrentLinkedQueue,下面就来介绍下使用独占锁实现的阻塞队列LinkedBlockingQueue的实现二、 LinkedBlockingQueue类图结构如图LinkedBlockingQueue中也有两个Node分别用来存放首尾节点,并且里面有个初始值为0的原子变量count用来记录队列元素个数,另外转载 2017-07-20 01:03:15 · 1421 阅读 · 0 评论 -
利于ThreadLocal管理Hibernate Session
在利用Hibernate开发DAO模块时,我们和Session打的交道最多,所以如何合理的管理Session,避免Session的频繁创建和销毁,对于提高系统的性能来说是非常重要的,以往是通过eclipse的插件来自动完成这些代码的,当然效果是不错的,但是总是觉得不爽(没有读懂那些冗长的代码),所以现在打算自己实现Session管理的代码。我们知道Session是由SessionFactory负责转载 2017-06-28 16:58:13 · 305 阅读 · 0 评论 -
Hashtable、synchronizedMap、ConcurrentHashMap 比较
Doug Lea的util.concurrent包除了包含许多其他有用的并发构造块之外,还包含了一些主要集合类型List和Map的高性能的、线程安全的实现。Brian Goetz向您展示了用ConcurrentHashMap替换Hashtable或synchronizedMap,将有多少并发程序获益。 在Java类库中出现的第一个关联的集合类是Hashtable,它是JDK 1.0的一部分转载 2017-06-28 18:41:15 · 548 阅读 · 0 评论 -
Java集合中那些类是线程安全的 以及 Map线程安全几种实现方法
线程安全类在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的。在jdk1.2之后,就出现许许多多非线程安全的类。 下面是这些线程安全的同步的类:vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。statck:堆栈类,先进后出hash转载 2017-06-28 18:42:18 · 2900 阅读 · 0 评论 -
彻底理解ThreadLocal
ThreadLocal是什么 早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影转载 2017-06-28 18:49:12 · 251 阅读 · 0 评论 -
Java多线程学习(吐血超详细总结)
目录(?)[-]一扩展javalangThread类二实现javalangRunnable接口三Thread和Runnable的区别四线程状态转换五线程调度六常用函数说明使用方式为什么要用join方法七常见线程名词解释八线程同步九线程数据传递 本文主要讲了Java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。首先讲转载 2017-06-22 16:40:55 · 306 阅读 · 0 评论 -
Java中的多线程你只要看这一篇就够了
如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。很多人都对其中的一转载 2017-06-22 16:37:57 · 236 阅读 · 0 评论 -
正确理解ThreadLocal
首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。 另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()来实现的,而是通过每个线程中的new 对象 的操作转载 2014-12-29 15:59:14 · 452 阅读 · 0 评论 -
Java线程学习经典例子-读写者演示
Java线程学习经典例子-读写者演示Java线程学习最经典的例子-读写者,主要用到Thread相关知识如下:-线程的start与run-线程的休眠(sleep)-数据对象加锁(synchronized)-数据对象的等待与释放(wait and notify)程序实现:-ObjectData数据类对象,通过synchronized关键字实现加锁转载 2017-06-23 14:03:40 · 288 阅读 · 0 评论 -
java的守护线程setDaemon
Thread.setDaemon的用法,经过学习以后了解:1. setDaemon需要在start方法调用之前使用2. 线程划分为用户线程和后台(daemon)进程,setDaemon将线程设置为后台进程3. 如果jvm中都是后台进程,当前jvm将exit。(随之而来的,所有的一切烟消云散,包括后台线程啦)4. 主线程结束后, 1) 用户线程将转载 2017-07-13 11:44:26 · 706 阅读 · 0 评论 -
Java线程同步:synchronized锁住的是代码还是对象
在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronized既可以加在一段代码上,也可以加在方法上。关键是,不要认为给方法或者代码段加上synchronized就万事大吉,看下面一段代码:[java] view plain copy转载 2017-06-26 13:29:04 · 242 阅读 · 0 评论 -
Java中Synchronized的用法
《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础。本文将接着讲一下Java线程同步中的一个重要的概念synchronized.synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}转载 2017-06-26 14:13:26 · 272 阅读 · 0 评论 -
JAVA中无锁的线程安全整数AtomicInteger介绍和使用
今天写代码,尝试使用了AtomicInteger这个类,感觉使用起来很爽,特别适用于高并发访问,下面贴一个简单的例子:Java代码 CashierContext类部分代码: private Map counter = new HashMap(); private void initCounter() {转载 2017-07-20 17:48:47 · 1588 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来转载 2017-07-20 19:25:14 · 1078 阅读 · 0 评论 -
BlockingQueue中add,offer,put方法区别
DK8中继承了BlockingQueue接口的类,如LinkedBlockingQueue,添加元素都有3种方法add,offer,put。add public boolean add(E e) { if (offer(e)) return true; else throw new IllegalSt转载 2017-07-19 23:29:15 · 734 阅读 · 0 评论 -
JAVA阻塞队列LinkedBlockingQueue以及非阻塞队列ConcurrentLinkedQueue区别
阻塞队列:线程安全按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。注意:1、必须要使用take()方法在获取的时候达成阻塞结果2、使用poll()方法将产转载 2017-07-19 23:32:27 · 3178 阅读 · 0 评论 -
并发队列-无界非阻塞队列 ConcurrentLinkedQueue 原理探究
一、 前言常用的并发队列有阻塞队列和非阻塞队列,前者使用锁实现,后者则使用CAS非阻塞算法实现,使用非阻塞队列一般性能比较好,下面就看看常用的非阻塞ConcurrentLinkedQueue是如何使用CAS实现的。二、 ConcurrentLinkedQueue类图结构如图ConcurrentLinkedQueue中有两个volatile类型的Node节点分别用来存转载 2017-07-20 01:00:37 · 1624 阅读 · 0 评论