用户登录
用户注册

Java 理论与实践: 正确使用 Volatile 变量


  Java语言中的Volatile变量可以被看作是一种“程度较轻的?synchronized”;与?synchronized?块相比,volatile变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是?synchronized?的一部分。本文介绍了几种有效使用volatile变量的模式,并强调了几种不适合使用volatile变量的情形。
  锁提供了两种主要特性:互斥(mutualexclusion)?和可见性(visibility)。互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的——如果没有同步机制提供的这种可见性保证,线程看到的共享变量可能是修改前的值或不一致的值
  • 0
  • 0
  • 0
  • 0
  • 0

可提高Java开发性能的5款调试工具


  Java是一种非常强大的编程语言,自问世以来就广受欢迎。作为现今十分流行的移动平台——Android的核心语言,它大大促进了移动通信行业的发展。因此可以肯定,随着Android平台的不断扩张,Java开发人员的需求量也会不断增加。
  这篇文章为大家介绍了多款有用的调试工具,以供参考。不过,在此之前,先来看看有哪些不同类型的调试器。
  调试器的类型CLI调试器(命令行调试器):GDB、JBD,等等。IDE调试器(集成开发环境调试器):NetBeans、Eclipse,等等。可构建的调试器:JSwat堆转储:jmap、MAT历史调试动态跟踪生产调试
  好,下面就让我将这些卓越的调试工具一一道来。1.JDB
  Ja
  • 0
  • 0
  • 0
  • 0
  • 0

Java中的ThreadLocal深入理解


  提到ThreadLocal,有些Android或者Java程序员可能有所陌生,可能会提出种种问题,它是做什么的,是不是和线程有关,怎么使用呢?等等问题,本文将总结一下我对ThreadLocal的理解和认识,希望让大家理解ThreadLocal更加透彻一些。ThreadLocal是什么
  ThreadLocal是一个关于创建线程局部变量的类。
  通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程则无法访问和修改。Global&&Local
  上面的两个修饰看似矛盾,实则不然。Global意思是在当前线程中,任何一个点都可以访问到ThreadLocal的值。Local意思是该线程的ThreadLocal只能被该线程访问,一
  • 0
  • 0
  • 0
  • 0
  • 0

Java Stream 使用详解


  Stream是Java8新增加的类,用来补充集合类。
  Stream代表数据流,流中的数据元素的数量可能是有限的,也可能是无限的。
  Stream和其它集合类的区别在于:其它集合类主要关注与有限数量的数据的访问和有效管理(增删改),而Stream并没有提供访问和管理元素的方式,而是通过声明数据源的方式,利用可计算的操作在数据源上执行,当然BaseStream.iterator()和BaseStream.spliterator()操作提供了遍历元素的方法。
  JavaStream提供了提供了串行和并行两种类型的流,保持一致的接口,提供函数式编程方式,以管道方式提供中间操作和最终执行操作,为Java语言的集合提供了现代语言提供的类似的高阶函数操作,简化和提高了Java集合的功能。
  本文首先介绍JavaStream的特点,然后按照功能分类逐个介绍流的中间操作和终点操作,最后会介绍第三方为JavaStream做的扩展。
  前年年底的时候我写了一些关于Java8Lambda和Stream的文章,本文应该在那个时候完
  • 0
  • 0
  • 0
  • 0
  • 0

Java8 HashMap实现原理探究


  前言:Java8之后新增挺多新东西,在网上找了些相关资料,关于HashMap在自己被血虐之后痛定思痛决定整理一下相关知识方便自己看。图和有些内容参考的这个文章:http://www.importnew.com/16599.html
  HashMap的存储结构如图:一个桶(bucket)上的节点多于8个则存储结构是红黑树,小于8个是单向链表。
  1:HashMap的一些属性public?class?HashMap<k,v>?extends?AbstractMap<k,v>?implements?Map<k,v>,?Cloneable,?Serializable?{????private?static?final?long?serialVersionUID?=?362498820763181265L;???
  • 0
  • 0
  • 0
  • 0
  • 0

Java高级软件工程师面试考纲


  如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构、算法、网络、操作系统等知识。因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对Java高级开发工程师职位的考核纲要,希望可以帮助到需要的人。
  当前,市面上有《JavaXX宝典》类似的图书,而且图书中的内容都着重在讲解Java最为基础的部分,最严重的是,里面有着大量错误的内容,极具误导性。另外,网上也有各种各样的Java面试题,很多也是着重在Java语言基础上。实际上,如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构、算法、网络、操作系统等知识。因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对Java高级开发工程师职位的考核纲要,希望可以帮助到需要的人。1Java基础
  1.1Collection和Map
  (1)掌握Co
  • 0
  • 0
  • 0
  • 0
  • 0

Java Web应用中调优线程池的重要性


  不论你是否关注,JavaWeb应用都或多或少的使用了线程池来处理请求。线程池的实现细节可能会被忽视,但是有关于线程池的使用和调优迟早是需要了解的。本文主要介绍Java线程池的使用和如何正确的配置线程池。单线程
  我们先从基础开始。无论使用哪种应用服务器或者框架(如Tomcat、Jetty等),他们都有类似的基础实现。Web服务的基础是套接字(socket),套接字负责监听端口,等待TCP连接,并接受TCP连接。一旦TCP连接被接受,即可从新创建的TCP连接中读取和发送数据。
  为了能够理解上述流程,我们不直接使用任何应用服务器,而是从零开始构建一个简单的Web服务。该服务是大部分应用服务器的缩影。一个简单的单线程Web服务大概是这样的:ServerSocketlistener=newServerSocket(8080);try{while(true){Socketsocket=listener.accept();try{handleRequest(s
  • 0
  • 0
  • 0
  • 0
  • 0

Java I/O 模型的演进


  什么是同步?什么是异步?阻塞和非阻塞又有什么区别?本文先从Unix的I/O模型讲起,介绍了5种常见的I/O模型。而后再引出Java的I/O模型的演进过程,并用实例说明如何选择合适的JavaI/O模型来提高系统的并发量和可用性。
  由于,Java的I/O依赖于操作系统的实现,所以先了解Unix的I/O模型有助于理解Java的I/O。相关概念同步和异步
  描述的是用户线程与内核的交互方式:同步是指用户线程发起I/O请求后需要等待或者轮询内核I/O操作完成后才能继续执行;异步是指用户线程发起I/O请求后仍继续执行,当内核I/O操作完成后会通知用户线程,或者调用用户线程注册的回调函数。阻塞和非阻塞
  描述的是用户线程调用内核I/O操作的方式:
  • 0
  • 0
  • 0
  • 0
  • 0

Java并发编程:性能、扩展性和响应

1、介绍
  本文讨论的重点在于多线程应用程序的性能问题。我们会先给性能和扩展性下一个定义,然后再仔细学习一下Amdahl法则。下面的内容我们会考察一下如何用不同的技术方法来减少锁竞争,以及如何用代码来实现。2、性能
  我们都知道,多线程可以用来提高程序的性能,背后的原因在于我们有多核的CPU或多个CPU。每个CPU的内核都可以自己完成任务,因此把一个大的任务分解成一系列的可彼此独立运行的小任务就可以提高程序的整体性能了。可以举个例子,比如有个程序用来将硬盘上某个文件夹下的所有图片的尺寸进行修改,应用多线程技术就可以提高它的性能。使用单线程的方式只能依次遍历所有图片文件并且执行修改,如果我们的CPU有多个核心的话,毫无疑问,它只能利用其中的一个核。使用多线程的方式的话,我们可以让一个生产者线程扫描文件系统把每个图片都添加到一个队列中,然后用多个工作线程来执行这些任务。如果我们的工作线程的数量
  • 0
  • 0
  • 0
  • 0
  • 0

Java GBK 中文乱码问题分析


  在io相关的操作中经常会出现乱码问题
  比如在一个txt文件中按GBK编码保存内容淘!我喜欢!
  然后用RandomAccessFile类读取并打印一行。RandomAccessFileraf=newRandomAccessFile("D://1.txt","r");System.out.print(raf.readLine());
  打印结果显示乱码:
  在网上查询到加入相关编码解码操作后可以解决该问题RandomAccessFileraf=newRandomAccessFi
  • 1
  • 2
  • 0
  • 0
  • 0

Java虚拟机内存优化实践


  前面一篇文章介绍了Java虚拟机的体系结构和内存模型,既然提到内存,就不得不说到内存泄露。众所周知,Java是从C++的基础上发展而来的,而C++程序的很大的一个问题就是内存泄露难以解决,尽管Java的JVM有一套自己的垃圾回收机制来回收内存,在许多情况下并不需要java程序开发人员操太多的心,但也是存在泄露问题的,只是比C++小一点。比如说,程序中存在被引用但无用的对象:程序引用了该对象,但后续不会或者不能再使用它,那么它占用的内存空间就浪费了。
  我们先来看看GC是如何工作的:监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等,当该对象不再被引用时,释放对象(GC本文的重点,不做过多阐述)。很多Java程序员过分依赖GC,但问题的关键是无论JVM的垃圾回收机制做得多好,内存总归是有限的资源,因此就算GC会为我们完成了大部分的垃圾回收,但适当地注意编码过程中的内存优化还是很必要的。这样可以有效的减少GC次数,同时提升内存利用率,最大限度地提高程序的效率。
  总体而言,Ja
  • 0
  • 0
  • 0
  • 0
  • 0

Java程序员使用的20几个大数据工具


  最近我问了很多Java开发人员关于最近12个月内他们使用的是什么大数据工具。
  这是一个系列,主题为:语言web框架应用服务器SQL数据访问工具SQL数据库大数据构建工具云提供商
  今天我们就要说说大数据。根据维基百科,大数据是数据集的一个广义的术语,并且该数据集是如此庞大和复杂,以致于传统的数据处理应用程序无法胜任。
  在许多情况下,使用SQL数据库用于存储/检索数据就足够了。但在另一些情况下,要么SQL数据库规模不够,要么还有更好的工具。这一
  • 0
  • 0
  • 0
  • 0
  • 0

Java LinkedList 源码分析

简介
  LinkedList是一个常用的集合类,用于顺序存储元素。LinkedList经常和ArrayList一起被提及。大部分人应该都知道ArrayList内部采用数组保存元素,适合用于随机访问比较多的场景,而随机插入、删除等操作因为要移动元素而比较慢。LinkedList内部采用链表的形式存储元素,随机访问比较慢,但是插入、删除元素比较快,一般认为时间复杂都是O(1)(需要查找元素时就不是了,下面会说明)。本文分析LinkedList的具体实现。继承关系publicclassLinkedList<E>extendsAbstractSequentialList<E>implementsList<E>,Deque<E>,Cloneable,java.io.Serializable
  LinkedList继承了一个抽象类AbstractSequentialList,这个类就是用调用ListIterator实
  • 0
  • 0
  • 0
  • 0
  • 0

Java 反射机制详解

动态语言
  动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态语言。(引自:百度百科)varexecString="alert(Math.floor(Math.random()*10));";eval(execString);Class反射机制指的是可以于运行时加载,探知和使用编译期间完全未知的类.程序在运行状态中,可以动态加载一个只有名称的类,对于任意一个已经加载的类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能调用他的任意一个方法和属性;加载完类之后,在堆内存中会产生一个Class类型的对象(一个类只有一个Class对象),这个对象包含了完整的类的结构信息,而且
  • 0
  • 0
  • 0
  • 0
  • 0

一步一步理解 Java 企业级应用的可扩展性


  摘要:本文主要介绍如何理解Java应用的扩展方式以及不同类型的扩展技术和具体技巧,介绍一些有关Java企业级应用的一般扩展策略。
  老实说,“可扩展性”是个全面且详尽的话题,而且往往得不到充分理解。人们通常认为可扩展性等同于高可用性,笔者见过编程新手和架构师“老手”都建议将集群作为可扩展性和高可用性的解决方案。建议确实没错,但问题是,人们通常是通过互联网搜索,而非实际理解应用本身的情况来实现集群。
  笔者并未自称“专家”,只想通过这篇文章介绍一些有关Java企业级应用的一般扩展策略。问题
  可扩展性并非Java企业级平台规范内的标准组件。相关技术通常因供应商(应用服务器)而异,并且往往需要使用不止一款产品(应用服务器本身除外)。正因如此,设计可扩展的Java企业级应用才会有些棘手,要完成任务,往往不仅没有可以参照的实例,而且要求我们必须彻彻底底地理解应用。扩展类型
  笔者确信你们不是第一次看到这些内容。扩展一般分为两大类:纵向扩展,和横向扩展。
  扩展的第一个自
  • 0
  • 0
  • 0
  • 0
  • 0

Java异常的深入研究与分析


前言
  本文是异常内容的集大成者,力求全面,深入的异常知识研究与分析。本文由金丝燕网独家撰写,参考众多网上资源,经过内容辨别取舍,文字格式校验等步骤编辑而成,以飨读者。对于本文的内容,建议小白需要多多思考力求掌握,对于老手只需意会温故知新。对于本文的内容,属于基础知识研究范畴,切勿以为读完此文就能将异常知识掌握到家。切记:操千曲而后晓声,观千剑而后识器,所以我觉得没有大量的源码阅读经验,你很难知道什么时候需要自定义异常,什么时候需要抛出异常。异常机制概述
  异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。异常处理的流程
  当程序中抛出一个异常后,程序从程序中导致异常的代码处跳出,java虚拟机检测寻找和try关键字匹配的处理该异常的catch块,如果找到,将控制权交到catch块中的代码,然后继续往下执行程序,try块中发生异常的代码不会被重新执行。如果没有找到处理该异常的catch
  • 0
  • 0
  • 0
  • 0
  • 0

Spring源码分析之spring-jms模块详解

0概述
  spring提供了一个jms集成框架,这个框架如spring集成jdbcapi一样,简化了jmsapi的使用。
  jms可以简单的分成两个功能区,消息的生产和消息的消费。JmsTemplate类用来生成消息和同步接受消息。和其它javaee的消息驱动样式一样,对异步消息,spring也提供了许多消息监听容器用来创建消息驱动的POJO(MDPs)。spring同时也提供了创建消息监听器的声明方式。
  org.springframework.jms.core提供了使用JMS的核心功能,它包含JmsTemplate类,该类类似于jdbc中的jdbdTemplate,它通过对资源的创建和释放处理来简化jms开发。spring的模板类作为一种设计原则在spring框架中广泛使用,模板类对简单操作提供了帮助方法;对复杂操作,通过继承回调接口提供了重要处理过程的代理。jmsTemplate同样遵循这一设计原则,它提供了发送消息、同步消费消息、为用户提供JMSsession和消息生产者的多种便利方法。
  org.spri
  • 0
  • 0
  • 0
  • 0
  • 0

Java 中的中文编码问题深入分析


  编码问题一直困扰着开发人员,尤其在Java中更加明显,因为Java是跨平台语言,不同平台之间编码之间的切换较多。本文将向你详细介绍Java中编码问题出现的根本原因,你将了解到:Java中经常遇到的几种编码格式的区别;Java中经常需要编码的场景;出现中文问题的原因分析;在开发Javaweb程序时可能会存在编码的几个地方,一个HTTP请求怎么控制编码格式?如何避免出现中文问题?几种常见的编码格式为什么要编码
  不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言。由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元——byte来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解。我们可以把计算机能够理解的语言假定为英语,其它语言要能够在计算机中使用必须经过一次翻译,把它翻译成英语。这个翻译的过程就是编
  • 0
  • 0
  • 0
  • 0
  • 0

Java高级特性之反射学习总结


  老规矩我们还是先提出几个问题,一门技术必然要能解决一定的问题,才有去学习掌握它的价值一、什么是反射?二、反射能做什么?
  一、什么是反射?
  用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。
  如果你是一个AndroidDeveloper,前辈们都会教导你尽量少用反射,效率太低,太慢。“射”嘛,射的太快就不好了,所以反射虽然慢点,但是偶尔射一下还是很”爽”的。
  二、反射能做什么?
  1、新建类的实例
  我们知道所有的类都继承子顶级父类Object,而Object中有hashCode()、equals()、clone()、toString()、getClass()
  • 0
  • 0
  • 0
  • 0
  • 0

Java虚拟机体系结构深入研究总结


  工作以来,代码越写越多,程序也越来越臃肿,效率越来越低,对于我这样一个追求完美的程序员来说,这是绝对不被允许的,于是除了不断优化程序结构外,内存优化和性能调优就成了我惯用的“伎俩”。
  要对Java程序进行内存优化和性能调优,不了解虚拟机的内部原理(或者叫规范更严谨一点)是肯定不行的,这里推荐一本好书《深入Java虚拟机(第二版)》(BillVenners著,曹晓刚蒋靖译,实际上本文正是作者阅读本书之后,对Java虚拟机的个人理解阐述)。当然了,了解Java虚拟机的好处并不仅限于上述两点好处。从更深一点的技术层面上看,了解Java虚拟机的规范和实现,将更加有助于我们编写高效、稳定的Java代码。比如,假如了解Java虚拟机的内存模型,了解虚拟机的内存回收机制,那么我们就不会过分依赖它,而会在需要的时候显式的释放内存(Java代码不能显式释放内存,但是可以通过释放对象引用告知垃圾回收器回收该对象需要被回收),以降低不必要的内存消耗;假如我们了解Java栈的工作原理,
  • 0
  • 0
  • 0
  • 0
  • 0
1  2  3  4  5  ...  下一页  

分享至

长按复制下方链接,去粘贴给好友吧:
软件
前端设计
程序设计
Java相关