Java
文章平均质量分 92
刘望舒
腾讯最具价值专家,Android进阶书畅销前三: 《Android进阶指北》《Android进阶解密》《Android进阶之光》 作者 ,连续5年蝉联电子工业出版社年度优秀作者。国内首批Android开发者,10多年开发经验,前华为架构师、独角兽公司技术总监。国内唯一被百度百科收录的Android技术专家,谷歌开发者社区、Droidcon等技术大会特邀讲师,CSDN 2018年度十大博客之星。
展开
-
Java并发编程(三)volatile域
有时仅仅为了读写一个或者两个实例域就使用同步的话,显得开销过大,volatile关键字为实例域的同步访问提供了免锁的机制。如果声明一个域为volatile,那么编译器和虚拟机就知道该域是可能被另一个线程并发更新的。再讲到volatile关键字之前我们需要了解一下内存模型的相关概念以及并发编程中的三个特性:原子性,可见性和有序性。原创 2016-02-13 17:48:32 · 11059 阅读 · 3 评论 -
Java并发编程(六)阻塞队列
在Android多线程(一)线程池这篇文章时,当我们要创建ThreadPoolExecutor的时候需要传进来一个类型为BlockingQueue的参数,它就是阻塞队列,在这一篇文章里我们会介绍阻塞队列的定义、种类、实现原理以及应用。原创 2016-07-31 11:09:27 · 14360 阅读 · 3 评论 -
Java并发编程(七)ConcurrentLinkedQueue的实现原理和源码分析
我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,本节我们就来研究下ConcurrentLinkedQueue是如何保证线程安全的同时又能高效的操作的。。使用阻塞算法的队列可以用原创 2016-08-14 17:21:24 · 8258 阅读 · 0 评论 -
Java并发编程(一)线程定义、状态和属性
一 、线程和进程1. 什么是线程和进程的区别: 线程是指程序在执行过程中,能够执行程序代码的一个执行单元。在java语言中,线程有四种状态:运行 、就绪、挂起和结束。 进程是指一段正在执行的程序。而线程有事也被成为轻量级的进程,他得程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内功空间(代码段、数据段和堆空间)及一些进程级的资源(例如打开的文件),但是各个线程都拥原创 2015-10-05 15:30:31 · 10163 阅读 · 0 评论 -
Java并发编程(二)同步
如果你的java基础较弱,或者不大了解java多线程请先看这篇文章java多线程(一)线程定义、状态和属性同步一直是java多线程的难点,在我们做android开发时也很少应用,但这并不是我们不熟悉同步的理由。希望这篇文章能使更多的人能够了解并且应用java的同步。 在多线程的应用总,两个或者两个以上的线程需要共享对同一个数据的存取。如果两个线程存取相同的对象,并且每一个线程都调用了修改该对原创 2015-12-15 14:04:20 · 3695 阅读 · 6 评论 -
Java并发编程(五)ConcurrentHashMap的实现原理和源码分析
在Java1.5中,并发编程大师Doug Lea给我们带来了concurrent包,而该包中提供的ConcurrentHashMap是线程安全并且高效的HashMap,本节我们就来研究下ConcurrentHashMap是如何保证线程安全的同时又能高效的操作。原创 2016-07-21 11:12:28 · 12619 阅读 · 5 评论 -
Java虚拟机(一)结构原理与运行时数据区域
本来计划要写Android内存优化的,觉得有必要在此之前介绍一下Java虚拟机的相关知识,Java虚拟机也并不是三言两语能够介绍完的,因此开了Java虚拟机系列,这一篇文章我们来学习Java虚拟机的结构原理与运行时数据区域。原创 2017-04-21 13:10:38 · 5506 阅读 · 4 评论 -
Java虚拟机(四)垃圾收集算法
在本系列上一篇文章中我讲到了垃圾标记算法,垃圾被标记后,GC就会对垃圾进行收集,垃圾收集有很多种算法,这篇文章就来介绍常用的垃圾收集算法的思想。原创 2017-05-23 00:55:35 · 2736 阅读 · 3 评论 -
Java虚拟机(二)对象的创建与OOP-Klass模型
在前一篇文章中我们学习了Java虚拟机的结构原理与运行时数据区域,那么我们大概知道了Java虚拟机的内存的概况,那么内存中的数据是如何创建和访问的呢?这篇文章会给你答案。原创 2017-05-04 11:43:18 · 5601 阅读 · 2 评论 -
Java并发编程(四)Java内存模型
此前我们讲到了线程、同步以及volatile关键字,对于Java的并发编程我们有必要了解下Java的内存模型,因为Java线程之间的通信对于工程师来言是完全透明的,内存可见性问题很容易使工程师们觉得困惑,这篇文章我们来主要的讲下Java内存模型的相关概念。原创 2016-05-29 10:39:11 · 7839 阅读 · 0 评论 -
Java nio Socket非阻塞模式
NIO 有一个主要的类Selector,这个类似一个观察者,只要我们把需要探知的socketchannel告诉Selector,我们接着做别的事情,当有 事件发生时,他会通知我们,传回一组SelectionKey,我们读取这些Key,就会获得我们刚刚注册过的socketchannel,然后,我们从 这个Channel中读取数据,放心,包准能够读到,接着我们可以处理这些数据。Selector内部原创 2012-11-18 16:51:47 · 5153 阅读 · 0 评论 -
java生产者消费者问题实现
/** *经典生产者与消费者问题:生产者不断的往仓库中存放产品,消费者从仓库中消费产品。 *其中生产者和消费者都可以有若干个。仓库容量有限,库满时不能存放,库空时不能取产品 */ public class ProducersAndConsumers { public static void main(String[] args) {转载 2013-08-07 20:58:46 · 1777 阅读 · 0 评论 -
java之static使用详解
<br />请先看下面这段程序:<br />public class Hello{<br />public static void main(String[] args){ //(1)<br />System.out.println("Hello,world!"); //(2)<br />}<br />}<br />看过这段程序,对于大多数学过Java 的从来说,都不陌生。即使没有学过Java,而学过其它的高级语言,例如C,那你也应该能看懂这段代码的意思。它只是简单的输出"Hello转载 2011-06-01 21:08:00 · 1796 阅读 · 0 评论 -
java中的length属性和length()方法和size()方法的区别
<br />1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性. <br />1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.<br />2 java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法.<br />3.java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,转载 2011-05-31 21:55:00 · 3986 阅读 · 0 评论 -
同步Synchronized方法与代码块
<br />打个比方:一个object就像一个大房子,大门永远打开。房子里有很多房间(也就是方法)。这些房间有上锁的(synchronized方法),和不上锁之分(普通方法)。房门口放着一把钥匙(key),这把钥匙可以打开所有上锁的房间。另外我把所有想调用该对象方法的线程比喻成想进入这房子某个房间的人。所有的东西就这么多了,下面我们看看这些东西之间如何作用的。 <br /><br />在此我们先来明确一下我们的前提条件。该对象至少有一个synchronized方法,否则这个key还有啥意义。当然转载 2011-06-02 18:20:00 · 1911 阅读 · 0 评论 -
格式化字符串长度,超出部分显示省略号,区分汉字跟字母
由于android软件的显示控件上要求长度超过一定的数值就截取并加省略号,所以写了这个方法: package com.eoeandroid.demo.testcode; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory原创 2011-07-01 13:06:00 · 3534 阅读 · 0 评论 -
java同步机制 synchronized
JAVA中synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。假如再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类名称字面常量)身上。在进一步阐述之前,我们需要明确几点: A.无论synchronized关键字加在方法上转载 2012-09-23 11:21:37 · 2154 阅读 · 0 评论 -
Java实现同步机制(生产者消费者)
Java实现线程的同步,可以通过synchronized,wait(), notitfy(), notifyAll();假设一个线程(生产者)生产产品,一个线程(消费者)消费产品,其访问的资源时间都是随机的,这样就是生产者必须得产品(资源)消费完成之后才可以生产,而消费者必须在产品有的时候才可以消费,这就是必须对资源进行同步操作,对资源的使用部分的代码需要加入锁。下列是我的实现方法:转载 2012-09-23 12:33:10 · 2998 阅读 · 0 评论 -
Object,byte[],ByteBuffer之间的转换
package cn.vicky.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; imp转载 2012-11-18 16:31:42 · 12463 阅读 · 0 评论 -
Java虚拟机(三)垃圾标记算法与Java对象的生命周期
这一节我们来简单的介绍垃圾收集器,并学习垃圾标记的算法:引用计数算法和根搜索算法,为了更好的理解根搜索算法,会在文章的最后介绍Java对象在虚拟机中的生命周期。原创 2017-05-16 11:36:04 · 2951 阅读 · 2 评论