
JAVA
文章平均质量分 83
Andy.World
人无远虑 - 必有近忧
展开
-
Java 异步编程最佳实践
译文出处: colobu.com 原文出处:developer.com什么是异步?为什么要用它?异步编程提供了一个非阻塞的,事件驱动的编程模型。 这种编程模型利用系统中多核执行任务来提供并行,因此提供了应用的吞吐率。此处吞吐率是指在单位时间内所做任务的数量。 在这种编程方式下, 一个工作单元将独立于主应用线程而执行, 并且会将它的状态通知调用线程:成功,处理中或者失败。转载 2017-02-28 17:26:17 · 796 阅读 · 0 评论 -
AsyncTask -- Java异步调用框架
版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[-] 原创文章转载请注明作者jmppok及出处httpblogcsdnnetjmppokarticledetails44590991 AsyncTask是个人编写的一个Java异步调用框架支持用户 为什么需要AsyncTask与Asyn4J 区别 1Java传统的Thread 和 Runable功能不足 2 Asyn4J转载 2017-02-28 17:39:25 · 450 阅读 · 0 评论 -
AsyncTask -- Java异步调用框架
原创文章,转载请注明作者:jmppok及出处:http://blog.youkuaiyun.com/jmppok/article/details/44590991。 AsyncTask是个人编写的一个Java异步调用框架,支持用户:1)自定义Task,并可设置Task的类型(Type), 子类型(subType),超时时间(TImeout),标识(Flag-可用来区分不同的Task),转载 2017-02-28 17:40:09 · 4110 阅读 · 0 评论 -
Oracle执行计划详解
Oracle执行计划详解---作者:TTT BLOG本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html---简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容。 并有总结和概述,便于理解与记忆!+++转载 2017-02-11 11:53:13 · 330 阅读 · 0 评论 -
Java多线程编程总结
Java多线程编程总结 下面是Java线程系列博文的一个编目: Java线程:概念与原理Java线程:创建与启动Java线程:线程栈模型与线程的变量Java线程:线程状态的转换 Java线程:线程的同步与锁Java线程:线程的交互Java线程:线程的调度-休眠 Java线程:线程的调度-优先级Java线程:线程的调度-让步Java线程:线转载 2017-02-11 16:16:25 · 290 阅读 · 0 评论 -
Java线程:概念与原理
Java线程:概念与原理 SCJP5学习笔记 一、操作系统中线程和进程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。 线程是指进程中的一个执行流程转载 2017-02-11 16:18:46 · 268 阅读 · 0 评论 -
Java线程:创建与启动
Java线程:创建与启动 SCJP5学习笔记 一、定义线程 1、扩展java.lang.Thread类。 此类中有个run()方法,应该注意其用法:public void run()如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返转载 2017-02-11 16:21:06 · 258 阅读 · 0 评论 -
Java线程:线程栈模型与线程的变量
Java线程:线程栈模型与线程的变量 SCJP5学习笔记 要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型。线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶。线程栈的内容是随着程序的运行动态变化的,因此研究线程栈必须选择一个运行的时刻(实际上指代码运行到什么地方)。 下面通过一个示例性的代码说明线程(调用)栈转载 2017-02-11 16:22:17 · 349 阅读 · 0 评论 -
Java线程:线程状态的转换
Java线程:线程状态的转换 SCJP5学习笔记 一、线程状态 线程的状态转换是线程控制的基础。线程状态总的可分为五大状态:分别是生、死、可运行、运行、等待/阻塞。用一个图来描述如下: 1、新状态:线程对象已经创建,还没有在其上调用start()方法。 2、可运行状态:当线程有资格运行,但调度程序还没有把它转载 2017-02-11 16:23:24 · 233 阅读 · 0 评论 -
Java线程:线程的同步与锁
Java线程:线程的同步与锁 一、同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。例如:两个线程ThreadA、ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据。 public class Foo { private int x = 100;转载 2017-02-11 16:24:27 · 168 阅读 · 0 评论 -
Java线程:线程的交互
Java线程:线程的交互 SCJP5学习笔记 线程交互是比较复杂的问题,SCJP要求不很基础:给定一个场景,编写代码来恰当使用等待、通知和通知所有线程。 一、线程交互的基础知识 SCJP所要求的线程交互知识点需要从java.lang.Object的类的三个方法来学习: void notify()转载 2017-02-11 16:25:43 · 183 阅读 · 0 评论 -
Java线程:线程的调度-休眠
Java线程:线程的调度-休眠 Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。 这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。 线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休眠一定转载 2017-02-11 16:27:18 · 205 阅读 · 0 评论 -
Java线程:线程的调度-优先级
Java线程:线程的调度-优先级 与线程休眠类似,线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。 线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先级为5。 在一个线程中开启另外一个新线程,则新开线程称为该线程的子线程,子线程初始优先级与父线程相同。转载 2017-02-11 16:28:03 · 188 阅读 · 0 评论 -
Java线程:线程的调度-让步
Java线程:线程的调度-让步 线程的让步含义就是使当前运行着线程让出CPU资源,但是然给谁不知道,仅仅是让出,线程状态回到可运行状态。 线程的让步使用Thread.yield()方法,yield() 为静态方法,功能是暂停当前正在执行的线程对象,并执行其他线程。 /** * Java线程:线程的调度-让步 * * @author l转载 2017-02-11 16:28:56 · 190 阅读 · 0 评论 -
Java线程:线程的调度-合并
Java线程:线程的调度-合并 线程的合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。 join为非静态方法,定义如下:void join() 等待该线程终止。 void join(long millis) 等待该线程终止的转载 2017-02-11 16:29:46 · 147 阅读 · 0 评论 -
Java线程:线程的调度-守护线程
Java线程:线程的调度-守护线程 守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程。 守护线程使用的情况较少,但并非无用,举例来说,JVM的垃圾回收、内存管理等线程都是守护线程。还有就是在做数据库应用时候,使用的数据库连接池,连接池本身也包含着很多后台线程,监控连接个数、超时时间、状态等等。转载 2017-02-11 16:30:24 · 171 阅读 · 0 评论 -
Java线程:线程的同步-同步方法
Java线程:线程的同步-同步方法 线程的同步是保证多线程安全访问竞争资源的一种手段。线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源、什么时候需要考虑同步,怎么同步等等问题,当然,这些问题没有很明确的答案,但有些原则问题需要考虑,是否有竞争资源被同时改动的问题? 在本文之前,请参阅《Java线程:线程的同步与锁》,本文是在此基础上所写转载 2017-02-11 16:31:11 · 178 阅读 · 0 评论 -
Java线程:线程的同步-同步块
Java线程:线程的同步-同步块 对于同步,除了同步方法外,还可以使用同步代码块,有时候同步代码块会带来比同步方法更好的效果。 追其同步的根本的目的,是控制竞争资源的正确的访问,因此只要在访问竞争资源的时候保证同一时刻只能一个线程访问即可,因此Java引入了同步代码快的策略,以提高性能。 在上个例子的基础上,对oper方法做了改动,由同步方法改为同步转载 2017-02-11 16:31:53 · 190 阅读 · 0 评论 -
Java线程:并发协作-生产者消费者模型
Java线程:并发协作-生产者消费者模型 对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一样,Hello World!都是最经典的例子。 实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓储,生产者消费者模型就显得没有说服力了。对于此模型,应该明确一下几点:1、生产者仅仅在仓储未满时候生产,仓满则转载 2017-02-11 16:32:46 · 242 阅读 · 0 评论 -
Java线程:并发协作-死锁
Java线程:并发协作-死锁 线程发生死锁可能性很小,即使看似可能发生死锁的代码,在运行时发生死锁的可能性也是小之又小。 发生死锁的原因一般是两个对象的锁相互等待造成的。 在《Java线程:线程的同步与锁》一文中,简述死锁的概念与简单例子,但是所给的例子是不完整的,这里给出一个完整的例子。 /** * Java线程:并发协转载 2017-02-11 16:33:29 · 246 阅读 · 0 评论 -
Java线程:volatile关键字
Java线程:volatile关键字 Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。 谈及到volatile关键字,不得不提的一篇文章是:《Java 理论与实践: 正确使用 Volatil转载 2017-02-11 16:34:24 · 231 阅读 · 0 评论 -
Java线程:新特征-线程池
Java线程:新特征-线程池 Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序,线程部分的新增内容显得尤为重要。 有关Java5线程新特征的内容全部在java.util.concurrent下面,里面包含数目众多的接转载 2017-02-11 16:35:11 · 218 阅读 · 0 评论 -
Java线程:新特征-有返回值的线程
Java线程:新特征-有返回值的线程 在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。 现在Java终于有可返回值的任务(也可以叫做线程)了。 可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。 执行Callable任务后转载 2017-02-11 16:36:10 · 201 阅读 · 0 评论 -
Java线程:新特征-锁(上)
Java线程:新特征-锁(上) 在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在java.util.concurrent.locks 包下面,里面有三个重要的接口Condition、Lock、ReadWriteLock。 ConditionCondition 将 Obj转载 2017-02-11 16:37:09 · 209 阅读 · 0 评论 -
Java线程:新特征-锁(下)
Java线程:新特征-锁(下) 在上文中提到了Lock接口以及对象,使用它,很优雅的控制了竞争资源的安全访问,但是这种锁不区分读写,称这种锁为普通锁。为了提高性能,Java提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,在一定程度上提高了程序的执行效率。 Java中读写锁有个接口java.util.concurrent.locks.ReadWrite转载 2017-02-11 16:37:59 · 223 阅读 · 0 评论 -
Java线程:新特征-信号量
Java线程:新特征-信号量 Java的信号量实际上是一个功能完毕的计数器,对控制一定资源的消费与回收有着很重要的意义,信号量常常用于多线程的代码中,并能监控有多少数目的线程等待获取资源,并且通过信号量可以得知可用资源的数目等等,这里总是在强调“数目”二字,但不能指出来有哪些在等待,哪些资源可用。 因此,本人认为,这个信号量类如果能返回数目,还能知道哪些对象在等待,转载 2017-02-11 16:38:43 · 197 阅读 · 0 评论 -
Java线程:新特征-阻塞队列
Java线程:新特征-阻塞队列 阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添加新元素的操作会被阻塞等待,直到有空位为止。同样,当队列为空时候,请求队列元素的操作同样会阻塞等待,直到有可用元素为止。 有了这样的功能,就为多转载 2017-02-11 16:39:21 · 169 阅读 · 0 评论 -
Java线程:新特征-阻塞栈
Java线程:新特征-阻塞栈 对于阻塞栈,与阻塞队列相似。不同点在于栈是“后入先出”的结构,每次操作的是栈顶,而队列是“先进先出”的结构,每次操作的是队列头。 这里要特别说明一点的是,阻塞栈是Java6的新特征。、 Java为阻塞栈定义了接口:java.util.concurrent.BlockingDeque,其实现类也比较多,具体可以查看Java转载 2017-02-11 16:40:38 · 179 阅读 · 0 评论 -
Java线程:新特征-条件变量
Java线程:新特征-条件变量 条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量。但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义。 这里的条件和普通意义上的条件表达式有着天壤之别。 条件变量都实现了java.util.concurrent.locks.Condit转载 2017-02-11 16:41:36 · 213 阅读 · 0 评论 -
Java线程:新特征-原子量
Java线程:新特征-原子量 所谓的原子量即操作变量的操作是“原子的”,该操作不可再分,因此是线程安全的。 为何要使用原子变量呢,原因是多个线程对单个变量操作也会引起一些问题。在Java5之前,可以通过volatile、synchronized关键字来解决并发访问的安全问题,但这样太麻烦。Java5之后,专门提供了用来进行单变量多线程并发安全访问的工具包ja转载 2017-02-11 16:42:20 · 181 阅读 · 0 评论 -
Java线程:新特征-障碍器
Java线程:新特征-障碍器 Java5中,添加了障碍器类,为了适应一种新的设计需求,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择障碍器了。 障碍器是多线程并发控制的一种手段,用法很简单。下面给个例子: import java.util.concurrent.BrokenBa转载 2017-02-11 16:42:56 · 186 阅读 · 0 评论 -
《亿级流量网站架构核心技术》一书值得看吗?
在“《亿级流量网站架构核心技术》目录一览”中,已经介绍了本书的大体内容,其中主体内容是2014年/2015年/2016年公众号/博客文章的汇编,比如聊聊高并发系列、商品详情页架构系列、还有一些碰到并解决的问题等。 比如聊聊高并发系列,内容偏理论,如何实现并没有过多介绍。《亿级流量网站架构核心技术》一书会补充案例,让大家能落地到自己系统中。聊聊高并发之隔离术聊聊高并发转载 2017-02-11 16:44:28 · 5695 阅读 · 1 评论 -
聊聊高并发之隔离术
聊聊高并发之隔离术原创 2016-09-12 张开涛 开涛的博客隔离是指将系统或资源分割开,系统隔离是为了在系统发生故障时能限定传播范围和影响范围,即发生故障后不会出现滚雪球效应,从而保证只有出问题的服务不可用,其他服务还是可用的;而资源隔离有脏数据隔离、通过隔离后减少资源竞争提升性能等。我遇到的比较多的隔离手段有线程隔离、进程隔离、集群隔离、机房隔离、读写隔离、动静隔离、爬虫转载 2017-02-11 16:47:26 · 533 阅读 · 0 评论 -
聊聊高并发系统之限流特技-1
聊聊高并发系统之限流特技-12016-06-12 张开涛 开涛的博客在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹;而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开;而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀、抢购)、写服务(如评论、下单转载 2017-02-11 16:49:27 · 373 阅读 · 0 评论 -
聊聊高并发系统之限流特技-2
聊聊高并发系统之限流特技-22016-06-14 张开涛 开涛的博客上一篇《聊聊高并发系统限流特技-1》讲了限流算法、应用级限流、分布式限流;本篇将介绍接入层限流实现。接入层限流接入层通常指请求流量的入口,该层的主要目的有:负载均衡、非法请求过滤、请求聚合、缓存、降级、限流、A/B测试、服务质量监控等等,可以参考笔者写的《使用Nginx+Lua(Op转载 2017-02-11 16:50:59 · 1089 阅读 · 0 评论 -
聊聊高并发系统之降级特技
聊聊高并发系统之降级特技2016-06-22 张开涛 开涛的博客在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。之前已经有一些文章介绍过缓存和限流了。本文将详细聊聊降级。当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级。本转载 2017-02-11 16:52:07 · 1389 阅读 · 0 评论 -
聊聊高并发系统之HTTP缓存
聊聊高并发系统之HTTP缓存原创 2016-08-22 张开涛 开涛的博客简介最近遇到很多人来咨询我关于浏览器缓存的一些问题,而这些问题都是类似的,因此总结本文来解答以后遇到类似问题的朋友。因本文主要以浏览器缓存场景介绍,所以非浏览器场景下的一些用法本文不会介绍,而且本文以chrome为测试浏览器。浏览器缓存是指当我们使用浏览转载 2017-02-11 16:53:03 · 387 阅读 · 0 评论 -
应用多级缓存模式支撑海量读服务
应用多级缓存模式支撑海量读服务2016-03-21 张开涛 开涛的博客缓存技术是一个老生常谈的问题,但是它也是解决性能问题的利器,一把瑞士军刀;而且在各种面试过程中或多或少会被问及一些缓存相关的问题,如缓存算法、热点数据与更新缓存、更新缓存与原子性、缓存崩溃与快速恢复等各种与缓存相关的问题。而这些问题中有些问题又是与场景相关,因此如何合理应用缓存来解决问题也是一个选择题。本文所转载 2017-02-11 16:53:56 · 317 阅读 · 0 评论 -
聊聊java高并发系统之异步非阻塞
聊聊java高并发系统之异步非阻塞原创 2016-08-11 孙伟 开涛的博客作者:孙伟,目前负责京东商品详情页统一服务系统,写过java,写过ngx_lua,还写过storm等,喜欢学习研究新事物。在做电商系统时,流量入口如首页、活动页、商品详情页等系统承载了网站的大部分流量,而这些系统的主要职责包括聚合数据拼装模板、热点统计、缓存、下游功能降级开关、转载 2017-02-11 16:54:44 · 723 阅读 · 0 评论 -
商品详情页系统的Servlet3异步化实践
商品详情页系统的Servlet3异步化实践2015-11-25 张开涛 开涛的博客在京东工作的这一年多时间里,我在整个商品详情页系统(后端数据源)及商品详情页统一服务系统(页面中异步加载的很多服务,如库存服务、图书相关服务、延保服务等)中使用了Servlet3请求异步化模型,总结了Servlet3请求异步化的一些经验和想法跟大家分享和交流。我将从如下几点阐述转载 2017-02-11 16:56:16 · 238 阅读 · 0 评论