今天在看Lock,都知道相比于synchronized,多了公平锁,可中断等优秀性能. 但是说到可中断这个特点,看到很多博客是这么描述的: “与synchronized关键字不同,获取到锁的线程能够响应中断,当获取到锁的线程被中断时,中断异常将会被抛出,同时锁会被释放” 我的理解是,应该是未获得到锁的线程被中断时,中断异常将会被抛出. 看了下lockInterruptibly()的源码 第一层 public void lockInterruptibly() throws InterruptedE…
在java的 java.util.concurrent.locks包中,ReentrantLock类实现了lock接口,lock接口用于加锁和解锁限制,加锁后必须释放锁,其他的线程才能进入到里面执行,否则出现死锁现象. lockInterruptibly()方法介绍: 此方法返回的为获取锁的方法,但是当线程调用了interrupt()方法后,此方法将会返回一个异常,导致线程的中断.即线程中断. 代码实例如下: package TestThread.ThreadLockDemo; import j…
Sketch介绍 为什么要用Sketch 网络流主要根据五元组.主机地址.包的大小来分类.在网络中存在各种各样的包,如果按照上述分类方法,对每一种包都分配一个计数器来储存,虽然测量准确,那么存放计数器的空间开销会非常大.所以使用哈希的方法,根据哈希值的范围来确定的所需的存储空间,各种包根据哈希值再次归类,可以大大减少存储空间.这样使用哈希来估计流的方法称为Sketch-based方法. Count-min sketch 如何处理包 使用哈希的方法会产生冲突,多个种类的包哈希到同一个桶内,那么这个…
public ActionResult ShopInfo() { ViewBag.ShopList = ShopService.GetEntities(x => x.IsDelete == false).OrderByDescending(x => x.Sort).ToList(); var ShopList = ShopService.GetEntities(x => x.IsDelete == false).GroupBy(x => new { x.CityName }).Se…
公平锁与非公平锁 ReentrantLock有一个很大的特点,就是可以指定锁是公平锁还是非公平锁,公平锁表示线程获取锁的顺序是按照线程排队的顺序来分配的,而非公平锁就是一种获取锁的抢占机制,是随机获得锁的,先来的未必就一定能先得到锁,从这个角度讲,synchronized其实就是一种非公平锁.非公平锁的方式可能造成某些线程一直拿不到锁,自然是非公平的了.看一下例子,new ReentrantLock的时候有一个单一参数的构造函数表示构造的是一个公平锁还是非公平锁,传入true就可以了: publ…
公平锁与非公平锁 ReentrantLock有一个很大的特点,就是可以指定锁是公平锁还是非公平锁,公平锁表示线程获取锁的顺序是按照线程排队的顺序来分配的,而非公平锁就是一种获取锁的抢占机制,是随机获得锁的,先来的未必就一定能先得到锁,从这个角度讲,synchronized其实就是一种非公平锁.非公平锁的方式可能造成某些线程一直拿不到锁,自然是非公平的了.看一下例子,new ReentrantLock的时候有一个单一参数的构造函数表示构造的是一个公平锁还是非公平锁,传入true就可以了: publ…
一.前言 Java线程同步两种方式,synchronized关键字和Lock锁机制,其中,AQS队列就是Lock锁实现公平加锁的底层支持. 二.AQS源码对于lock.lock()的实现 2.1 AQS类 + 内部Node类 2.1.1 AQS类结构示意图 首先我们要看看AQS的结构的类图 从AQS类的类结构示意图可以知道, AbstractQueuedSynchronizer的父类是AbstractOwnableSynchronizer: AbstractQueuedSynchronizer的…
原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/24/listview_itemupdating_findcontrol_20130624.aspx ListView与.FindControl()方法的简单练习 #2 -- ItemUpdting事件中抓取「修改后」的值 本文跟上一篇文章有关连,请依照顺序来练习: ListView与.FindControl()方法的简单练习#1 -- Page_Load事件中的错误 http…
一 是什么? package com.aaa.threaddemo; /* * 多线程中的sleep方法? * sleep 隶属于Thread的方法,顾名思义,让线程睡一会. 1 public static native void sleep(long millis) throws InterruptedException; 使用需要try catch,或者 声明一个异常,才能使用. 2 long 跟的时间单位是秒 3 会让线程进入阻塞状态 4 调用线程会[暂时让出指定时间]的执行权.让出CPU…
本文所有的源码都是基于JDK1.8 ConcurrentHashmap中的size()方法源码: public int size() { long n = sumCount(); return ((n < 0L) ? 0 : (n > (long)Integer.MAX_VALUE) ? Integer.MAX_VALUE : (int)n); } final long sumCount() { CounterCell[] as = counterCells; CounterCell a; l…
TimSort算法是一种起源于归并排序和插入排序的混合排序算法,设计初衷是为了在真实世界中的各种数据中能够有较好的性能. 该算法最初是由Tim Peters于2002年在Python语言中提出的. TimSort 是一个归并排序做了大量优化的版本号. 对归并排序排在已经反向排好序的输入时表现O(n2)的特点做了特别优化.对已经正向排好序的输入降低回溯.对两种情况混合(一会升序.一会降序)的输入处理比較好. 在jdk1.7之后.Arrays类中的sort方法有一个分支推断,当LegacyMerge…
一 wait方法怎么用? package com.aaa.threaddemo; /* * 多线程中的wait方法? public final void wait() throws InterruptedException { wait(0); } 1 隶属于object,因为Java希望把并发控制做到每一个Object里 2 调用wait方法,线程会放弃对象锁,进入等待此对象的等待对象池. 3 只有针对此对象调用notify方法后,本线程才进入对象锁定池,准备获取对象锁,进行运行状态.否则就是…
前一篇博客简单介绍了ReentrantLock的定义和与synchronized的区别,下面跟随LZ的笔记来扒扒ReentrantLock的lock方法.我们知道ReentrantLock有公平锁.非公平锁之分,所以lock()我也已公平锁.非公平锁来进行阐述.首先我们来看ReentrantLock的结构[图来自Java多线程系列--"JUC锁"03之 公平锁(一)]: 从上图我们可以看到,ReentrantLock实现Lock接口,Sync与ReentrantLock是组合关系,且F…
lockInterruptibly()方法能够中断等待获取锁的线程.当两个线程同时通过lock.lockInterruptibly()获取某个锁时,假若此时线程A获取到了锁,而线程B只有等待,那么对线程B调用threadB.interrupt()方法能够中断线程B的等待过程. 示例: 要执行doBussiness()中的代码首先需要得到锁lock,线程使用lockInterruptibly()方法获取锁. 如下示例中,t0得到了锁,t1等待.在t1等待时,调用t1.interrupt(),中断t…
前一篇博客简介了ReentrantLock的定义和与synchronized的差别,以下尾随LZ的笔记来扒扒ReentrantLock的lock方法.我们知道ReentrantLock有公平锁.非公平锁之分,所以lock()我也已公平锁.非公平锁来进行阐述.首先我们来看ReentrantLock的结构[图来自Java多线程系列–"JUC锁"03之 公平锁(一)]: 从上图我们能够看到,ReentrantLock实现Lock接口.Sync与ReentrantLock是组合关系,且Fair…
JDK 1.5 之前 synchronized 的性能是比较低的,但在 JDK 1.5 中,官方推出一个重量级功能 Lock,一举改变了 Java 中锁的格局.JDK 1.5 之前当我们谈到锁时,只能使用内置锁 synchronized,但如今我们锁的实现又多了一种显式锁 Lock. 前面的文章我们已经介绍了 synchronized,详见以下列表: <synchronized 加锁 this 和 class 的区别!> <synchronized 优化手段之锁膨胀机制!> <…
ReentrantLock和synchronized一样都是实现线程同步,但是像比synchronized它更加灵活.强大.增加了轮询.超时.中断等高级功能,可以更加精细化的控制线程同步,它是基于AQS实现的锁,他支持公平锁和非公平锁,同时他也是可重入锁和自旋锁. 本章将基于源码来探索一下ReentrantLock的加锁机制,文中如果存在理解不到位的地方,还请提出宝贵意见共同探讨,不吝赐教. 公平锁和非公平锁的加锁机制流程图: 一.ReentrantLock的公平锁 使用ReentrantLoc…
原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详细内容请看这里“http://msdn2.microsoft.com/zh-cn/library/system.data.datacolumn.expression(VS.80).aspx”.而Filter则是条件过滤器,类似sql的Where条件. DataTable dt = new DataT…
问题缘起 WPF的分层结构为编程带来了极大便利,XAML绑定是其最主要的特征.在使用绑定的过程中,大家都普遍的发现枚举成员的绑定是个问题.一般来说,枚举绑定多出现于与ComboBox配合的情况,此时我们希望实现的目标有: 建立选择项与ItemsSource的对应关系: 自动获取用于ItemsSource的枚举源: 自定义下拉框中显示的内容. 对于目标1,考虑最简单的模式,即枚举的定义采用从0开始的连续整数,可以使用IValueConverter接口来实现从枚举到整型的双向转换,以使得枚举成员绑定…
C#中的匿名方法是在C#2.0引入的,它终结了C#2.0之前版本声明委托的唯一方法是使用命名方法的时代.虽然在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方法,作为编写内联代码的首选方式.但是,匿名方法的信息同样也适用于 Lambda 表达式,可以说 Lambda 表达式就是匿名方法演变过来的,这点后续博文会讲解推演的过程.  我们可以使用匿名方法来忽略参数列表. 这意味着匿名方法可转换为具有各种签名的委托,而这对于 Lambda 表达式来说是不可能的. 学好匿名方法,才能更加深…
这个方法是简单的也是神奇的. 有木有想过,将自己项目中的所有类型,包括自定义类型的命名空间和名称全部获取出来? 有木有想过,有一种简便的方法可以自动化管理项目中的控件和窗体? 有木有想过... 首先,要敢想.要敢尝试. 通过以下方法,进行简单变换,是可以做到本程序控制本项目的窗体和控件. 以下方法简单了,就不一一说明了,如果你觉得有用,全部复制了编译一下,看看就明白是怎么反射了. 当然懂得大大们看到我有不足之处,请不要谩骂了,我脸皮薄,被你们骂骂就泄气了,技术有限,请大大们不吝赐教. 基础方法…
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 一.hashCode方法的作用 对于包含容器类型的程序设计语言来说,基本上都会涉及到h…
Android中NDK的搭建及简单使用: 使用NDK,简述其重要步骤:.搭建NDK环境(作用:用于自动生成jni下的.c对应的so文件)---到Android NDK官网或Android官网下载ndk包,环境搭建步骤具体参看http://www.cnblogs.com/yejiurui/p/3476565.html2.以eclipse为例,在com.test下创建Test2.java文件,会自动在项目的bin\classes\下生成相应的.class文件[若在项目中看不到,则可能当前在eclip…
cnblogs的页面, 一种是管理页面, 是随笔的列表 a full list of essays. 另一种是 首页. 要搜索文档的话, 就使用 "首页"的那种方式. 一个jquery的基本常识: 任何一个jquery完整的选择器, 完整的形式, 实际上包含的是两个参数 $("selector", context). context表示jquery搜索匹配的环境, 通俗的说就是 搜索的范围(有开始和 结尾),可以理解为: $("selector"…
根据输入校验的处理场所的不同,可以将输入校验分为客户端校验和服务器端校验两种.服务器端验证目前有两种方式: 第一种 Struts2中提供了一个com.opensymphony.xwork2.Validateable接口,此接口只有一个方法:validate().如果有某个类实现了Validatable接口,Struts2就可以直接调用该类中的validate()方法.ActonSupport类实现Validateable接口.本文讨论此验证格式. 本文演示了一个模拟简单登录的场景:用户打开一个J…
操作方法:concat() slice() splice() concat()方法可以基于当前数组中的所有项创建一个新数组.具体来说,这个方法会创建当前数组一个副本,将接收到参数添加到副本的末尾,最后返回新构建的数组.如果没有参数,复制当前数组并返回副本.如果参数是一个或多个数组,会将数组中的每一项添加到结果数组中.如果参数不是数组,将参数值添加到数组末尾. var colors = ['red','green','blue']; var colors2 = colors.concat('yel…
前文:struts2:数据校验,通过Action中的validate()方法实现校验,图解 如果定义的Action中存在多个逻辑处理方法,且不同的处理逻辑可能需要不同的校验规则,在这种情况下,就需要通过Struts2框架提供的validateX()方法来准确校验Action中的某一个方法,其中X表示处理逻辑的方法名. 还是以前的例子,换一种写法,来说明validate()方法和validateX()方法的用法. 1. 创建前台JSP页面 表单录入页面:registerM.jsp <%@ page…
clone([Even[,deepEven]]) 描述: 克隆匹配的DOM元素并且选中这些克隆的副本. 在想把DOM文档中元素的副本添加到其他位置时这个函数非常有用. 1:一个布尔值(true 或者 false)指示事件处理函数是否会被复制. 2:一个布尔值,指示是否对事件处理程序和克隆的元素的所有子元素的数据应该被复制. 如下例子一:(克隆所有b元素(并选中这些克隆的副本),然后将它们前置到所有段落中.) html代码: <b>Hello</b><p>, how ar…
目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口的具体应用 常用HandlerMethodArgumentResolver介绍 常用HandlerMethodReturnValueHandler介绍 本文开头现象解释以及解决方案 编写自定义的HandlerMet…
下面的例子以     NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"jonery",@"stany", nil];1.获取数组中总共有多少个对象.- (NSUInteger)count;    NSLog(@"%d",[array count]);   22.获取数组中下标对应的元素对象.(下标是…