分类目录归档:Java基础

一张图搞清楚Java异常机制

来自: Java技术栈

下面是Java异常类的组织结构,红色区域的异常类表示是程序需要显示捕捉或者抛出的。

继续阅读

发表在 Java基础 | 留下评论

一张图搞清楚Java异常机制

下面是Java异常类的组织结构,红色区域的异常类表示是程序需要显示捕捉或者抛出的。

Throwable

Throwable是Java异常的顶级类,所有的异常都继承于这个类。

Error,Exception是异常类的两个大分类。

Error

Error是非程序异常,即程序不能捕获的异常,一般是编译或者系统性的错误,如OutOfMemorry内存溢出异常等。

Exception

Exception是程序异常类,由程序内部产生。Exception又分为运行时异常、非运行时异常。

运行时异常

运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过,运行时异常可处理或者不处理。运行时异常一般常出来定义系统的自定义异常,业务根据自定义异常做出不同的处理。

常见的运行时异常如NullPointException、ArrayIndexOutOfBoundsException等。

非运行时异常

非运行时异常是程序必须进行处理的异常,捕获或者抛出,如果不处理程序就不能编译通过。如常见的IOException、ClassNotFoundException等。

发表在 Java基础 | 留下评论

深入理解BIO、NIO、AIO

来自:王磊

导读:本文你将获取到:同/异步 + 阻/非阻塞的性能区别;BIO、NIO、AIO 的区别;理解和实现 NIO 操作 Socket 时的多路复用;同时掌握 IO 最底层最核心的操作技巧。

BIO、NIO、AIO 的区别是什么?
同/异步、阻/非阻塞的区别是什么?
文件读写最优雅的实现方式是什么?
NIO 如何实现多路复用功能?

带着以上这几个问题,让我们一起进入IO的世界吧。

继续阅读

发表在 Java基础 | 留下评论

面向对象设计(OOD)原则SOLID

来源:树下老男孩

拥有一把锤子未必能成为建筑师

最近在项目开发过程中碰到了一些问题,发现在每波迭代开发过程中,经常需要去修改之前的代码,虽然出现这样的情形很正常,新的需求必然会带来新的功能新的设计,导致之前的代码受到影响。记得看过一个笑话:

“杀一个程序员不需要用枪,改三次需求就可以了”

其实需求设计是一个方面,另外我们作为设计开发人员有时候也需要去反省,反省一下代码的设计是否合理,为什么新功能的在原有代码上扩展会那么难,为什么我们的代码这么不稳定,牵一发而动全身?

继续阅读

发表在 Java基础 | 留下评论

Fork & Join框架详解

来源:Java技术栈

Fork/Join框架是Java7提供的并行执行任务框架,思想是将大任务分解成小任务,然后小任务又可以继续分解,然后每个小任务分别计算出结果再合并起来,最后将汇总的结果作为大任务结果。其思想和MapReduce的思想非常类似。对于任务的分割,要求各个子任务之间相互独立,能够并行独立地执行任务,互相之间不影响。

继续阅读

发表在 Java基础 | 留下评论

ThreadLocal原理及其实际应用

来源:format

前言

java猿在面试中,经常会被问到1个问题:java实现同步有哪几种方式

大家一般都会回答使用synchronized, 那么还有其他方式吗? 答案是肯定的, 另外一种方式也就是本文要说的ThreadLocal。

ThreadLocal介绍

ThreadLocal, 看名字也能猜到, “线程本地”, “线程本地变量”。 我们看下官方的一段话:

This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set method) has its own, independently initialized copy of the variable. ThreadLocal instances are typically private static fields in classes that wish to associate state with a thread (e.g., a user ID or Transaction ID).

粗略地翻译一下:
ThreadLocal这个类提供线程本地的变量。这些变量与一般正常的变量不同,它们在每个线程中都是独立的。ThreadLocal实例最典型的运用就是在类的私有静态变量中定义,并与线程关联。

什么意思呢? 下面我们通过1个实例来说明一下: 继续阅读

发表在 Java基础 | 留下评论

ABA问题的解决方法

来源:向程序猿进化

CAS操作可能带来ABA问题,因为CAS操作需要在操作值的时候,检查值有没有发生变化,如果没有发发生变化则更新。如果一个值原理是A,变成了B,又变成了A,那么使用CAS进行检查时会认为它的值没有变化,但是实际上却变了。

ABA问题的解决办法就是使用版本号,在变量前面追加版本号,每次变量更新时把版本号加1,那么A-B-A就会变成1A-2B-3A。

从jdk1.5开始,jdk中的Atomic包里提供了一个类AtomicStampedReference来解决ABA问题。这个类的compareAndSet方法的作用首先检查当前引用是否等于预期引用,并且检查当前标志是否等于预期标志,如果都相等,则以原子方式将该引用和标志的值设为给定的更新值。

 

 

发表在 Java基础 | 留下评论

阿姆达尔定律Amdahl和古斯塔夫森定律Gustafson

来源:东陆之滇

并发程序的几个概念

  • 同步(Synchronous)
  • 异步(Asynchronous)
  • 阻塞 (Blocking)
  • 非阻塞 (Non-Blocking)
  • 死锁 (Deadlock)

同步和异步通常用来形容方法的调用方式。 同步的方法调用时,后续行为需要等到方法执行完毕后才能执行。 异步调用时,一旦调用可以立即拿到结果,调用方可以继续后续的操作。

继续阅读

发表在 Java基础 | 留下评论

JUC (Java Util Concurrency) 基础内容概述

来源:YuKai

JUC概述

java.util.concurrent的缩写,该包参考自EDU.oswego.cs.dl.util.concurrent,是JSR 166标准规范的一个实现;JSR 166,是一个关于Java并发编程的规范提案,在JDK中,该规范由java.util.concurrent包实现。即,JUC是Java提供的并发包,其中包含了一些并发编程用到的基础组件。

继续阅读

发表在 Java基础 | 留下评论

Java – 并发编程概述

来源:尘语凡心

一、概述

在操作系统的学习中我们知道,随着不断提出的新的应用需求,计算机体系结构的不断发展,操作系统也在不断地发展,从最初的单道批处理系统到多道批处理系统、分时系统和实时系统等等,不同的操作系统有着各自不同的特征,但是它们也都有着几个基本特征,其中之一就是并发。进程和并发是现代操作系统中最重要的基本概念,由于多核多线程CPU的诞生,为了充分利用CPU的资源,多线程、高并发的编程越来越受重视和关注。

继续阅读

发表在 Java基础 | 留下评论