java
文章平均质量分 82
zhang15238156629
这个作者很懒,什么都没留下…
展开
-
线程、多线程与线程池总结
先看几个概念:线程:进程中负责程序执行的执行单元。一个进程中至少有一个线程。多线程:解决多任务同时执行的需求,合理使用CPU资源。多线程的运行是根据CPU切换完成,如何切换由CPU决定,因此多线程运行具有不确定性。线程池:基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后转载 2017-03-07 23:28:10 · 175 阅读 · 0 评论 -
Java并发编程:Callable、Future和FutureTask
Java并发编程:Callable、Future和FutureTask 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.转载 2017-04-22 10:40:24 · 155 阅读 · 0 评论 -
Java多线程:Semaphore信号量
Semaphore简介 Semaphore是一个计数信号量,它的本质是一个"共享锁"。信号量维护了一个信号量许可集。线程可以通过调用acquire()来获取信号量的许可;当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止。 线程可以通过release()来释放它所持有的信号量许可。 Semaphore为并发包中提供用于原创 2017-04-22 12:45:59 · 245 阅读 · 0 评论 -
JUC--CountDownLatch
简介CountDownLatch 允许一个或多个线程等待其他线程完成操作。主要方法: public CountDownLatch(int count); public void countDown(); latch.countDown(); 建议放在 finally里执行 public void await() throws InterruptedExceptio原创 2017-04-22 19:43:35 · 164 阅读 · 0 评论 -
JUC--CyclicBarrier的用法
CyclicBarrier和CountDownLatch一样,都是关于线程的计数器。用法略有不同,测试代码如下: 1 public class TestCyclicBarrier { 2 3 private static final int THREAD_NUM = 5; 4 5 public static class WorkerT转载 2017-04-22 21:00:48 · 203 阅读 · 0 评论 -
ReentrantReadWriteLock读写锁的使用
Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。 读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁;如果你的代码修改数据,只能有一原创 2017-04-23 16:00:26 · 217 阅读 · 0 评论 -
深入浅出UML类图
. 类类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。在系统中,每个类都具有一定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务。一个类可以有多种职责,设计得好的类一般只有一种职责。在定义类的时候,将类的职责分解成为类的属性和操作(即方法)。类的属性即类的数据职责,类的操作即类的行为职责。设计类是面向对象设计中最重要的组成转载 2017-05-14 14:46:31 · 618 阅读 · 0 评论 -
JAVA线程与线程、进程与进程间通信
I.线程与线程间通信一、基本概念以及线程与进程之间的区别联系:关于进程和线程,首先从定义上理解就有所不同1、进程是什么?是具有一定独立功能的程序、它是系统进行资源分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独 立运行的一段程序。2、线程又是什么?线程进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本转载 2017-04-24 14:59:44 · 203 阅读 · 0 评论 -
JAVA NIO解析
现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。再者,现在互联网的面试中上点level的都会涉及一下NIO或者AIO的问题(AIO下次再讲述,本篇主要讲述NIO),掌握好NIO也能帮助你获得一份较好的offer。 驱使博主写这篇文章的关键是网上关于NIO的文章转载 2017-05-08 10:54:56 · 683 阅读 · 0 评论 -
java 锁优化
Java对象的内存布局分为:对象头、实例数据和对其填充。对象头又可以分为”Mark Word”和类型指针klass。”Mark Word”是关键,默认情况下,其存储对象的HashCode、分代年龄和锁标记位。首先简单说下先偏向锁、轻量级锁、重量级锁三者各自的应用场景:偏向锁:只有一个线程进入临界区;轻量级锁:多个线程交替进入临界区;重量级锁:多个线程同时进入临界区。原创 2017-05-16 21:37:37 · 312 阅读 · 0 评论 -
LinkHashMap实现LRU
LinkedHashMap有一个removeEldestEntry(Map.Entry eldest)方法,通过覆盖这个方法,加入一定的条件,满足条件返回true。当put进新的值方法返回true时,便移除该map中最老的键和值。 package scorpio.jh.maptest;import Java.util.LinkedHashMap;import jav转载 2017-05-17 10:29:52 · 485 阅读 · 0 评论 -
ConcurrentHashMap补充
并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩_∩)O)。ConcurrentHashMap的设计与实现非常精巧,大量的利用了volati转载 2017-05-08 20:33:26 · 191 阅读 · 0 评论 -
JAVA中的Fork/Join框架
什么是fork/join框架 fork/join框架是ExecutorService接口的一个实现,可以帮助开发人员充分利用多核处理器的优势,编写出并行执行的程序,提高应用程序的性能;设计的目的是为了处理那些可以被递归拆分的任务。 fork/join框架与其它ExecutorService的实现类相似,会给线程池中的线程分发任务,不同之处在于它使用了工作窃取算法,所谓工作窃取,原创 2017-05-17 17:51:38 · 284 阅读 · 0 评论 -
session、cookie实现免登录
Cookie的机制Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能。Cookie的Domain和Path属性标识了这个Cookie是哪一个网站发送给浏览器的;Cookie的Expires属性标识了Cookie的有 效时间,当Cookie的有效时间过了之后,这些数据就被自动删除了。如果不设置过期时转载 2017-04-27 15:04:10 · 9862 阅读 · 0 评论 -
java读写锁设计缓存系统
package test; import java.util.HashMap; import java.util.Map; import java.util.Random; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWrit转载 2017-05-09 22:17:02 · 423 阅读 · 0 评论 -
java--强引用、弱引用、软引用、虚引用
1、强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下:Object o=new Object(); // 强引用 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。如果不使用时,要通过如下方式来弱化引用,如下:o=nul转载 2017-04-27 18:08:32 · 194 阅读 · 0 评论 -
Servlet线程安全解析
摘 要:介绍了Servlet多线程机制,通过一个实例并结合Java 的内存模型说明引起Servlet线程不安全的原因,给出了保证Servlet线程安全的三种解决方案,并说明三种方案在实际开发中的取舍。 Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所 以,在编写代码时需要非常细致地考转载 2017-05-30 11:27:54 · 495 阅读 · 0 评论 -
Java线程面试题 Top 50
50道Java线程面试题 下面是Java线程相关的热门面试题,你可以用它来好好准备面试。1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提转载 2017-04-21 19:05:51 · 257 阅读 · 0 评论 -
Java并发之AQS
AQS(AbstractQueuedSynchronized)就是ReentrantLock ,semaphore,countDownLatch的底层实现。在ReentrantLock 源码中,有个个内部类,同步器(sync) 集成AQS abstract static class Sync extends AbstractQueuedSynchronizer 。AQS中实现了维护一个它转载 2017-05-23 17:31:19 · 340 阅读 · 0 评论 -
java synchronized类锁,对象锁详解
在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法。因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识。 java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就转载 2017-04-21 16:21:56 · 342 阅读 · 0 评论 -
Java 并发工具包 java.util.concurrent 用户指南
1. java.util.concurrent - Java 并发工具包Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包。这个包包含有一系列能够让 Java 的并发编程变得更加简单轻松的类。在这个包被添加以前,你需要自己去动手实现自己的相关工具类。本文我将带你一一认识 java.util.concurrent 包里的这些类,然后你可以尝试着如何转载 2017-03-09 23:13:06 · 296 阅读 · 0 评论 -
List集合底层实现
1.List:List实现Collection接口,它的数据结构是有序可以重复的结合,该结合的体系有索引;它有三个实现类:ArrayList、LinkList、Vector三个实现类;三个实现类的区别:ArrayList:底层数据结构使数组结构,查询速度快,增删改慢,LinkList:底层使用链表结构,增删速度快,查询稍慢;Vector:底层是数组结构,线程同步ArrayL转载 2017-03-29 10:55:22 · 7098 阅读 · 3 评论 -
HashSet的实现原理
1. HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。 2. HashSet的实现: 对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比转载 2017-03-29 11:03:04 · 386 阅读 · 0 评论 -
ArrayList源码分析
一、前言一直就想看看java的源码,学习一下大牛的编程。这次下狠心花了几个晚上的时间,终于仔细分析了下 ArrayList 的源码(PS:谁说的一个晚上可以看完的?太瞎扯了)。现在记录一下所得。二、ArrayList 源码分析2.1 如何分析?想要分析下源码是件好事,但是如何去进行分析呢?以我的例子来说,我进行源码分析的过程如下几步:找到类:利用转载 2017-03-31 17:40:53 · 228 阅读 · 0 评论 -
Java中对Clone的理解
面试中经常遇到Clone的相关知识,今天总算是把Clone理解的比较透彻了!Java中Clone的概念大家应该都很熟悉了,它可以让我们很方便的“制造”出一个对象的副本来,下面来具体看看java中的Clone机制是如何工作的? 1. Clone和Copy 假设现在有一个User对象,User u1=new User(“U1001”,“Jason”,25),通常我们转载 2017-03-31 18:12:26 · 188 阅读 · 0 评论 -
JDK1.8中 HashMap实现原理
HashMap概述HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashMap的数据结构在Java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMa转载 2017-03-25 22:42:24 · 297 阅读 · 0 评论 -
ConcurrentHashMap--- JDK1.8
概述:1、设计首要目的:维护并发可读性(get、迭代相关);次要目的:使空间消耗比HashMap相同或更好,且支持多线程高效率的初始插入(empty table)。2、HashTable线程安全,但采用synchronized,多线程下效率低下。线程1put时,线程2无法put或get。实现原理:锁分离: 在HashMap的基础上,转载 2017-03-26 10:04:19 · 278 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们转载 2017-03-26 17:12:15 · 420 阅读 · 0 评论 -
try语句的finally到底是否执行
class Test { public int aaa() { int x = 1; try { return ++x; } catch (Exception e) { } finally { ++x; } return x;转载 2017-04-17 17:46:55 · 915 阅读 · 1 评论 -
HashMap为什么线程不安全(hash碰撞与扩容导致)
一直以来都知道HashMap是线程不安全的,但是到底为什么线程不安全,在多线程操作情况下什么时候线程不安全?让我们先来了解一下HashMap的底层存储结构,HashMap底层是一个Entry数组,一旦发生Hash冲突的的时候,HashMap采用拉链法解决碰撞冲突,Entry内部的变量: final Object key; Object value;转载 2017-04-05 17:03:32 · 1504 阅读 · 0 评论 -
LinkedHashMap源码解析
引言关于java中的不常见模块,让我一下子想我也想不出来,所以我希望以后每次遇到的时候我就加一篇。上次有人建议我写全所有常用的Map,所以我研究了一晚上LinkedHashMap,把自己感悟到的解释给大家。在本篇博文中,我会用一个例子展现LinkedHashMap的运行和初始化情况,展示LinkedHashMap的数据存储情况,同时用JDK1.8中它的源代码解释给大家。其实,在以前的博转载 2017-04-18 17:25:41 · 250 阅读 · 0 评论 -
Java面试中经常遇到的类执行顺序
单类执行顺序:下面是我写的一个demo:package com.bw;/** * @author brickworker * 关于类Color的描述:测试单个类的执行顺序问题 */public classColor { //构造函数 public Color() { System.out.println("构造函数执行");转载 2017-04-18 20:06:12 · 1898 阅读 · 0 评论 -
JAVA高并发 无锁(CAS)
Java当中提供了一些有关无锁类的使用,在底部使用比较交换指令来实现。一般来说有锁的方式,会导致线程可能会阻塞、挂起,在进入临界区之前由系统对它进行阻塞和挂起,相对来讲无锁的性能会更好些,除非是人为的挂起线程,否则通过无锁的方式线程是不可能被挂起的只会不断的重试。如果线程被挂起,做一次线程的上下文切换可能需要8万个时钟周期,但是如果做重试的操作(比如循环体),除非重试的操作过多,否转载 2017-04-15 22:08:34 · 820 阅读 · 0 评论 -
ConcurrentHashMap源码分析
先简单看下ConcurrentHashMap类在jdk1.7中的设计,其基本结构如图所示: 每一个segment都是一个HashEntrypublic class ConcurrentHashMapK, V> extends AbstractMapK, V> implements ConcurrentMapK, V>, Serializable { /转载 2017-04-16 16:47:49 · 628 阅读 · 0 评论 -
java 线程池
本篇主要涉及到的是java.util.concurrent包中的ExecutorService。ExecutorService就是Java中对线程池的实现。一、ExecutorService介绍ExecutorService是Java中对线程池定义的一个接口,它java.util.concurrent包中,在这个接口中定义了和后台任务执行相关的方法: Java API对E转载 2017-05-10 17:33:47 · 287 阅读 · 0 评论 -
EL表达式 (详解)
EL表达式 1、EL简介1)语法结构 ${expression}2)[]与.运算符 EL 提供.和[]两种运算符来存取数据。 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。例如: ${user.My-Name}应当改为${user["My-转载 2017-07-02 12:17:19 · 907 阅读 · 0 评论