#深入

深入理解java:4. 框架编程

了解Servlet和FilterServlet(即servlet-api.jar)是J2EE最重要的一部分,有了Servlet你就是J2EE了,J2EE的其他方面的内容择需采用。而Servlet规范你需要掌握的就是servlet和filter这两项技术。绝大多数框架不是基于servlet就是基于filter,如果它要在...

深入理解java:3. NIO 编程

 I/O简介I/O即输入输出,是计算机与外界世界的一个借口。IO操作的实际主题是操作系统。在Java编程中,一般使用流的方式来处理IO,所有的IO都被视作是单个字节的移动,通过stream对象一次移动一个字节。流IO负责把对象转换为字节,然后再转换为对象。什么是NIO NIO即NewIO,这个库是在...

深入理解java:2.4. 线程本地变量 java.lang.ThreadLocal类

ThreadLocal,很多人都叫它做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那样每个线程可以访问自己内部的副本变量。这句话从表面上看起来理解正确,但实际上这种理解是不太正确的。下面我们细细道来。 多线程并发执行时,...

深入理解java:2.3.6. 并发编程concurrent包 之管理类---线程池

  我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:  如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。  那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被...

深入理解java:2.3.5. 并发编程concurrent包 之容器BlockingQueue(阻塞队列)

阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。 阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器...

深入理解java:2.3.4. 并发编程concurrent包 之容器ConcurrentLinkedQueue(非阻塞的并发队列---循环CAS)

在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,本文让我们一起来研究下如何使用...

深入理解java:2.3.2. 并发编程concurrent包 之重入锁/读写锁/条件锁

重入锁Java中的重入锁(即ReentrantLock)  与JVM内置锁(即synchronized)一样,是一种排它锁。ReentrantLock提供了多样化的同步,比如有时间限制的同步(定时锁),可以被Interrupt的同步,即中断锁(synchronized的同步是不能Interrupt的...

深入理解java:2.3.1. 并发编程concurrent包 之Atomic原子操作(循环CAS)

java中,可能有一些场景,操作非常简单,但是容易存在并发问题,比如i++,此时,如果依赖锁机制,可能带来性能损耗等问题,于是,如何更加简单的实现原子性操作,就成为java中需要面对的一个问题。 在backport-util-concurrent没有被引入java1.5并成为JUC之前,这些原子类和原子操作方...

深入理解java:2.3. 并发编程 java.util.concurrent包

JUCjava.util.concurrent包,这个包是从JDK1.5开始引入的,在此之前,这个包独立存在着,它是由DougLea开发的,名字叫backport-util-concurrent,在1.5开始引入java,命名路径为java.util.concurrent,其中的基本实现方式,也有所改变。(来源于一位大...

深入理解java:2.2. 同步锁Synchronized及其实现原理

同步的基本思想为了保证共享数据在同一时刻只被一个线程使用,我们有一种很简单的实现思想,就是 在共享数据里保存一个锁 ,当没有线程访问时,锁是空的。当有第一个线程访问时,就 在锁里保存这个线程的标识 并允许这个线程访问共享数据。在当前线程释放共享数据之前,如果再有其他线程想要访问共...

深入理解java:2.1. volatile的使用及其原理

在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比synchronized的开销更小,本文将深入分析...

深入理解java:2. 多线程机制

很多人都对其中的一些概念不够明确,如同步、并发等等,让我们先理清一些概念,以免产生误会。多线程:指的是这个程序(一个进程)运行时,产生了不止一个线程。并行与并发:并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。并发:通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。并发...

深入理解java:1.3.2 JVM监控与调优

学习JavaGC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之。本篇,来看看[如何监控和优化GC机制。] 通过学习,我觉得JVM监控与调优,主要在3个着眼点上:1,如何配置?2,如何监控?3,如何优化? 首先,先来看看[1,如何配置?]参数设置在Java虚拟机的参数中,有3种表示...

深入理解java:1.3.1 JVM内存区域的划分(运行时数据区)

学习JavaGC机制,可以帮助我们在日常工作中排查各种内存溢出或泄露问题,解决性能瓶颈,达到更高的并发量,写出更高效的程序。 我们将从4个方面学习JavaGC机制,1,内存是如何分配的;2,哪些内存需要回收;3,在什么情况下执行GC以及执行GC的方式;4,如何监控和优化GC机制。 先来看看[1,内存...

深入理解java:1.3. 垃圾收集

 某一个时点,一个对象如果有一个以上的引用(Rreference)指向它,那么该对象就为活着的(Live),否则死亡(Dead),视为垃圾,可被垃圾回收器回收再利用。 垃圾回收操作需要消耗CPU、线程、时间等资源,所以容易理解的是垃圾回收操作不是实时的发生(对象死亡后不会马上释放),当内存消耗完或者...
首页上一页...23456...下一页尾页