基础--7.语言(Java)
文章平均质量分 94
咸鱼的梦想
这个作者很懒,什么都没留下…
展开
-
Spring@value用法
为了简化读取properties文件中的配置值,spring支持@value注解的方式来获取,这种方式大大简化了项目配置,提高业务中的灵活性。一、两种使用方法1、@Value("#{configProperties['key']}")2、@Value("${key}")二、配置2.1 @Value("#{configProperties['key']}")使用2.1.1配置转载 2018-01-25 16:15:06 · 1091 阅读 · 0 评论 -
Java多线程--并发中集合的使用之CopyOnWriteArralist
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。转载 2017-09-07 13:55:28 · 225 阅读 · 0 评论 -
Java多线程--并发中集合的使用之CopyOnWriteArraySet
概要本章是JUC系列中的CopyOnWriteArraySet篇。接下来,会先对CopyOnWriteArraySet进行基本介绍,然后再说明它的原理,接着通过代码去分析,最后通过示例更进一步的了解CopyOnWriteArraySet。内容包括:CopyOnWriteArraySet介绍CopyOnWriteArraySet原理和数据结构CopyOnWriteArra转载 2017-09-07 13:57:42 · 251 阅读 · 0 评论 -
Java多线程--并发中集合的使用之ArrayBlockingQueue
概要本章对Java.util.concurrent包中的ArrayBlockingQueue类进行详细的介绍。内容包括:ArrayBlockingQueue介绍ArrayBlockingQueue原理和数据结构ArrayBlockingQueue函数列表ArrayBlockingQueue源码分析(JDK1.7.0_40版本)ArrayBlockingQueue示例转载 2017-09-07 14:02:01 · 388 阅读 · 0 评论 -
Java多线程--并发中集合的使用PriorityBlockingQueue
引言在银行排队办理业务,通常会有一个VIP通道,让一些有VIP贵宾卡的优先办理业务,而不需要排队.这就是我们今天要讲的优先队列.例子假设在这么一个场景下,银行开始办理业务之前,已经来了20个客户,而且银行认为谁钱多,谁就优先办理业务.首先创建一个Human类,它包括姓名和存款两个属性public class Human { private int ma转载 2017-09-07 14:05:16 · 282 阅读 · 0 评论 -
Java多线程--并发中集合的使用之LinkedBlockingQueue
在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。注:什么叫线程安全?这个首先要明确。线程安全就是说多线程访问同转载 2017-09-07 14:07:24 · 466 阅读 · 0 评论 -
Java多线程--并发中集合的使用之LinkedBlockingDeque
一、双向队列DequeQueue除了前面介绍的实现外,还有一种双向的Queue实现Deque。这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂。下图描述的是Deque的完整体系图。需要说明的是LinkedList也已经加入了Deque的一部分(LinkedList是从jdk1.2 开始就存在数据结构)。 Deque在Q转载 2017-09-07 14:08:53 · 1101 阅读 · 0 评论 -
Java多线程--并发中容器的使用之SynchronousQueue
Java 6的并发编程包中的SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。不像ArrayBlockingQueue或LinkedListBlockingQueue,SynchronousQueue内部并没有数据缓存空间,你不能调用peek()方法来看队列中是否有数据元素,因为数据转载 2017-09-07 14:10:50 · 323 阅读 · 0 评论 -
Java多线程--并发中集合的使用之LinkedTransferQueue
LinkedTransferQueue 起源: 我觉得是这样的,之前的BlockingQueue是对 读取 或者 写入 锁定整个队列,所以在比较繁忙的时候,各种锁比较耗时而当时有一个SynchronizedQueue其实不能叫Queue,因为只能放一个物件,要么有一个物件在等人拿,要么有一个空等人放根据这个原理,诞生了LinkedTransferQueue,利用Co转载 2017-09-07 14:12:48 · 579 阅读 · 0 评论 -
Java多线程--线程的监控工具之jstack,jvisualvm
Java线程状态线程的五种状态* 新建:new(时间很短)* 运行:runnable* 等待:waitting(无限期等待),timed waitting(限期等待)* 阻塞:blocked* 结束:terminated(时间很短)Jvm监控工具一、jstack介绍:jstack用于打印出给定的java进程ID转载 2017-09-07 14:19:06 · 4286 阅读 · 0 评论 -
Java多线程--并发中集合的使用之ConcurrentLinkedDeque
在java中,最常用的数据结构可能是列表。有数目不详的元素列表,你可以添加、阅读、或删除任何位置的元素。此外,并发列表允许不同的线程列表中添加或删除元素时不产生任何数据不一致。非阻塞列表提供如下操作,如果操作不能立即完成,列出抛出异常或者返回一个null值。Java 7中引入了ConcurrentLinkedDeque类,它实现了一个非阻塞并发列表,在本教程中,我们将学习使用这个类。转载 2017-09-07 13:54:01 · 691 阅读 · 0 评论 -
Java多线程--CompletionService的使用
CompletionService简介CompletionService与ExecutorService类似都可以用来执行线程池的任务,ExecutorService继承了Executor接口,而CompletionService则是一个接口,那么为什么CompletionService不直接继承Executor接口呢?主要是Executor的特性决定的,Executor框架不能完全保证任转载 2017-09-07 13:30:43 · 198 阅读 · 0 评论 -
Java多线程--ExecutorService的使用
1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?[java] view plain copynew Thread(new Runnable() { @Override public void run() { // TODO Auto-gener转载 2017-09-07 13:33:25 · 323 阅读 · 0 评论 -
Java多线程--ScheduledExecutorService的使用
ScheduledExecutorService扩展了ExecutorService接口,提供时间排程的功能。 schedule(Callable callable, long delay, TimeUnit unit) 创建并执行在给定延迟后启用的 ScheduledFuture。schedule(Runnabl转载 2017-09-07 13:35:02 · 1798 阅读 · 0 评论 -
Java多线程--Fork Join分而治之
如今,多核处理器在服务器,台式机及笔记本电脑上已经很普遍了,同时也被应用在更小的设备上,比如智能手机和平板电脑。这就开启了并发编程新的潜力,因为多个线程可以在多个内核上并发执行。在应用中要实现最大性能的一个重要技术手段是将密集的任务分隔成多个可以并行执行的块,以便可以最大化利用计算能力。处理并发(并行)程序,一向都是比较困难的,因为你必须处理线程同步和共享数据的问题。对于java平台在语言转载 2017-09-07 13:37:00 · 1474 阅读 · 0 评论 -
Java多线程--并发集合框架概述
最近被陆陆续续问了几遍HashMap的实现,回答的不好,打算复习复习JDK中的集合框架,并尝试分析其源码,这么做一方面是这些类非常实用,掌握其实现能更好的优化我们的程序;另一方面是学习借鉴JDK是如何实现了这么一套优雅高效的类库,提升编程能力。在介绍具体适合类之前,本篇文章对Java中的集合框架做一个大致描述,从一个高的角度俯视这个框架,了解了这个框架的一些理念与约定,会大大帮助后面分析某转载 2017-09-07 13:39:27 · 768 阅读 · 0 评论 -
Java多线程--并发中集合的使用之ConcurrentHashMap
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开发中获益非浅转载 2017-09-07 13:41:02 · 7188 阅读 · 0 评论 -
Java多线程--线程监控工具VisualVM
在Java多线程程序运行时,多数情况下我们不知道到底发生了什么,只有出了错误的日志的时候,我们才知道原来代码中有死锁。撇开代码检查工具,我们先讨论一下利用VisualVM监控,分析我们的多线程的运行情况。AD:51CTO学院:IT精品课程在线看!在Java多线程程序运行时,多数情况下我们不知道到底发生了什么,只有出了错误的日志的时候,我们才知道原来代码中有死转载 2017-09-07 14:21:20 · 1165 阅读 · 0 评论 -
Java多线程--线程监控工具之Jconsole
一、JConsole是什么 从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。二、如何启动JConsole如果是从命令行启动,使转载 2017-09-07 14:22:57 · 3291 阅读 · 0 评论 -
Java多线程--使用Java Mission Control进行内存分配分析
jdk7u40自带了一个非常好用的工具,就是Java Mission Control。JRockit Misson Control用户应该会对mission control的很多功能十分熟悉,JRockit也是一款很棒的工具。本篇文章将着重关注如何使用Java Flight Recorder进行内存分配分析。jvm有着非常棒的小块内存虚拟化技术,这会让你产生一种拥有无限内存的错觉感,其转载 2017-09-07 14:24:39 · 1217 阅读 · 0 评论 -
Java多线程--上下文切换
前言本文来自方腾飞老师《Java并发编程的艺术》第一章。并发编程的目的是为了让程序运行得更快,但是并不是启动更多的线程就能让程序最大限度地并发执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战,比如上下文切换的问题、死锁的问题,以及受限于硬件和软件的资源限制问题,本文要研究的是上下文切换的问题。1.什么是上下文切换即使是单核CPU也支持多线程转载 2017-09-03 15:09:06 · 2820 阅读 · 0 评论 -
Java多线程--死锁
前言死锁单独写一篇文章是因为这是一个很严重的、必须要引起重视的问题。这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只要在这数十亿次操作中只要有一次发生了错误,就可能导致程序中发生死锁,并且即使通过压力测试也不可能找出所有潜在的死锁。 1.死锁一个经典的多线程问题。当一个线程永远地转载 2017-09-03 15:18:42 · 212 阅读 · 0 评论 -
Java多线程--资源限制可能影响多线程效率
前言本文来自方腾飞老师《Java并发编程的艺术》第一章。资源限制的挑战(1)什么是资源限制 资源限制是指在进行并发编程时,程序的执行速度受限于计算机硬件资源或软件资源。例如,服务器的带宽只有2Mb/s,某个资源的下载速度是1Mb/s每秒,系统启动10个线程下载资源,下载速度不会变成10Mb/s,所以在进行并发编程时,要考虑这些资源的限制。硬件资源限制有带宽转载 2017-09-03 15:29:52 · 309 阅读 · 0 评论 -
Java多线程--Volatile的实现原理
本文属于作者原创,原文发表于InfoQ:http://www.infoq.com/cn/articles/ftf-java-volatile引言在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到转载 2017-09-03 15:48:40 · 194 阅读 · 0 评论 -
Java多线程--syncornized原理与应用
本文属作者原创,原文发表于InfoQ:http://www.infoq.com/cn/articles/java-se-16-synchronized1 引言在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中为了减转载 2017-09-03 16:01:33 · 816 阅读 · 0 评论 -
Java多线程--原子操作的原理
本文属于作者原创,原文发表于InfoQ:http://www.infoq.com/cn/articles/atomic-operation1 引言原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。在多处理器上实现原子操作就变得有点复杂。本文让我们一起来聊一聊在Inter处理器和Java里是如转载 2017-09-03 16:12:29 · 283 阅读 · 0 评论 -
Java多线程--内存模型
1. 概述 多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系。在讨论Java内存模型和线程之前,先简单介绍一下硬件的效率与一致性。2.硬件的效率与一致性转载 2017-09-03 16:27:53 · 187 阅读 · 0 评论 -
Java多线程--概述-转自博客园-移动开发snow_flower
线程对象是可以产生线程的对象。比如在Java平台中Thread对象,Runnable对象。线程,是指正在执行的一个指点令序列。在java平台上是指从一个线程对象的start()开始,运行run方法体中的那一段相对独立的过程。相比于多进程,多线程的优势有: (1)进程之间不能共享数据,线程可以; (2)系统创建进程需要为该进程重新分配系统资源,故创建线程代价比较小;转载 2017-09-12 13:46:14 · 400 阅读 · 0 评论 -
Java多线程--概述-转自Kyrie lrving
如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。很多人都对其中的一些概念不转载 2017-09-12 13:44:56 · 436 阅读 · 0 评论 -
Java多线程--概述-转自林炳文Evankaka
写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢?如果你觉得此文很简单,那推荐你看看Java并发包的的线程池(Java并发编程与技术内幕:线程池深入理解),或者看这个专栏:Java并发编程与技术内幕。你将会对Java里头的高并发场景下的线程有更加深刻的理解。目录(?)[-]一扩展java转载 2017-09-12 13:41:57 · 264 阅读 · 0 评论 -
Java语法--通配符的上界通配符和下界通配符
和是Java泛型中的“通配符(Wildcards)”和“边界(Bounds)”的概念。:是指 “上界通配符(Upper Bounds Wildcards)”:是指 “下界通配符(Lower Bounds Wildcards)”为什么要用通配符和边界?使用泛型的过程中,经常出现一种很别扭的情况。比如按照题主的例子,我们有Fruit类,和它的派生类Apple类。clas转载 2017-09-11 16:05:29 · 4427 阅读 · 0 评论 -
Java多线程--final与多线程
Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例。final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的。final关键字的含义?final在Java中是一个保留的关键字,可转载 2017-09-11 14:56:42 · 1539 阅读 · 0 评论 -
Java多线程--ConcurrentHashMap
并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩_∩)O)。ConcurrentHashMap的设计与实现非常精巧,大量的利用了volatile,f转载 2017-09-11 11:46:03 · 516 阅读 · 0 评论 -
Java多线程--Monitor对象(二)
java中每个对象都有唯一的一个monitor,想拥有一个对象的monitor的话有以下三种方式:1.执行该对象的同步方法[java] view plain copypublic synchronize a () {} 2.执行该对象的同步块[java] view plain copy转载 2017-09-10 01:17:08 · 2020 阅读 · 0 评论 -
Java多线程--Monitor对象(一)
1. 什么是Monitor? Monitor其实是一种同步工具,也可以说是一种同步机制,它通常被描述为一个对象,主要特点是:对象的所有方法都被“互斥”的执行。好比一个Monitor只有一个运行“许可”,任一个线程进入任何一个方法都需要获得这个“许可”,离开时把许可归还。通常提供singal机制:允许正持有“许可”的线程暂时放弃“许可”,等待某个谓词成真(条件变量),而条件成立转载 2017-09-10 01:15:47 · 13563 阅读 · 1 评论 -
Java多线程--JVM执行之使用HSDIS插件分析JVM代码执行细节
在《Java虚拟机规范》之中,详细描述了虚拟机指令集中每条指令的执行过程、执行前后对操作数栈、对局部变量表的影响等细节。这些细节描述与Sun的早期虚拟机(Sun Classic VM)高度吻合,但随着技术的发展,高性能虚拟机真正的细节实现方式已经渐渐与虚拟机规范所描述产生越来越大的差距,虚拟机规范中的描述逐渐成了虚拟机实现的“概念模型”——即实现只能保证规范描述等效。基于上面的原因,我们分转载 2017-09-10 01:13:39 · 351 阅读 · 0 评论 -
Java多线程--并发中集合的使用之ConcurrentSkipListMap
概述 基于跳表实现的ConcurrentNavigableMap。1)containsKey、get、put、remove等操作的平均时间复杂度为log(n);size非固定时间操作,因异步特性,需要遍历所有节点才能确定size,且可能不是正确的值如果遍历过程中有修改;批量操作:putAll、equals、toArray、containsValue、clear非原子性。转载 2017-09-07 13:46:36 · 2007 阅读 · 0 评论 -
Java多线程--并发中集合的使用ConcurrentSkipListSet(from java platform)
java.util.concurrentClass ConcurrentSkipListSetjava.lang.Objectjava.util.AbstractCollectionjava.util.AbstractSetjava.util.concurrent.ConcurrentSkipListSetType P转载 2017-09-07 13:48:22 · 1156 阅读 · 0 评论 -
Java多线程--可重入锁
锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA下常见的锁名称以及特性,为大家答疑解惑。可重入锁:本文里面讲的是广义上的可重入锁,而不是单指JAVA下的ReentrantLock。转载 2017-09-04 22:17:44 · 226 阅读 · 0 评论 -
Java多线程--重入锁的实现原理
ReentrantLock 是一种支持支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁,除此之外,该锁还支持获取锁的公平性和非公平性选择。1 重入的实现对于锁的重入,我们来想这样一个场景。当一个递归方法被sychronized关键字修饰时,在调用方法时显然没有发生问题,执行线程获取了锁之后仍能连续多次地获得该锁,也就是说sychronized关键字支持锁的重入。对于Reen转载 2017-09-04 22:26:41 · 1654 阅读 · 0 评论