- 博客(14)
- 收藏
- 关注
原创 Java并发之volatile
volatile 与 并发三特性 volatile 保证可见性 volatile修饰共享变量,一旦一个线程对该共享变量作出修改,当修改写回主内存时,会使得其他访问该共享变量的线程中的值失效,从内存中重新提取最新修改后的值。 public class DemoVisibility { // 1、创建一个共享变量 private static volatile boolean flag = true; private static Object obj = new Object();
2020-08-18 21:09:43 132
原创 Java并发之synchronized
并发编程的三个问题 可见性 可见性 是指一个线程对共享变量进行修改,其他线程立即得到修改后的最新值。 可见性演示: 1、创建一个共享变量 2、创建一条线程不断读取共享变量 3、创建另一条线程修改共享变量 public class DemoVisibility { // 1、创建一个共享变量 private static boolean flag = true; public static void main(String[] args) throws I
2020-08-18 16:42:28 164
原创 Java基础之反射
反射 反射是由 Class 对象开始的,从 Class 对象中,我们可以获得: 1、有关该类的全部成员的完成列表; 2、该类的所有类型(它实现的接口和扩展的类); 3、有关该类自身的信息,如:应用的修饰符、所在的包。 反射通过字节码文件找到其类中的方法和属性等 反射机制 Java反射机制是在运行状态中 1、对于任意一个类,都能够知道这个类的所有属性和方法; 2、对于任意一个对象,都能够调用它的任意一个属性和方法; 这种动态获取的信息以及动态调用对象的方
2020-08-17 16:30:06 109
原创 Java并发之线程状态
线程状态 新建状态(NEW) 使用 new 操作符创建一个线程,并且尚未调用 start() 方法,此时线程处在新建状态。 Thread t = new DemoThread(); System.out.println(t.getState()); // output: NEW 可运行状态/就绪状态(RUNNABLE) 一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的 start() 方法。当线程对象调用 start() 方法即启动了线程,start() 方法创建线程运
2020-08-04 18:25:34 122
原创 Java并发之多线程的实现方式
多线程的四种实现方式 继承 Thread 类实现多线程 创建一个类,并继承 Thread 类 重写 Thread 类中的 run() 方法(业务代码) 实例化创建好的线程类 调用实例化对象的 start() 方法启动线程 public class ThreadDemo { public static void main(String[] args){ // 3、实例化创建好的线程类 Thread t = new DemoThread(); // 4
2020-08-01 17:30:10 209
原创 Java并发之进程与线程的区别
进程与线程 何为进程 进程是程序的一次执行过程,是系统进行资源分配的基本单位,实现了操作系统的并发。系统运行一个程序即是一个进程从创建,运行到消亡的过程。 何为线程 线程是一个比进程更小的执行单位,是CPU调度和分派的基本单位,一个进程在其执行的过程中可以产生多个线程,实现的是进程内部的并发。 进程与线程的区别 进程 线程 系统进行资源分配的最小单位 程序执行的最小单位 实现的是操作系统的并发 实现的是进程内部的并发 进程有自己独立的地址空间 线程共享数据 创建、
2020-08-01 17:27:01 92
原创 Java基础之String、StringBuilder 和 StringBuffer 的区别
String、StringBuilder 和 StringBuffer 的区别 String 与 (StringBuilder 和 StringBuffer) 的区别 String StringBuilder 与 StringBuffer 字符串数组用final修饰,不可变 字符串数组未用final修饰,可变 String字符串数组用final修饰,导致每次对String对象的修改操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间。 S...
2020-07-31 16:04:57 94
原创 Java基础之StringBuilder 与 StringBuffer
StringBuilder 与 StringBuffer 类的定义 public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializab
2020-07-31 15:42:55 92
原创 JVM之运行时数据区
JVM 运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。 程序计数器 线程私有,生命周期与线程相同 可以看作是当前线程所执行的字节码的行号指示器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念
2020-07-30 12:53:03 127
原创 Java基础之String
String 1.8 类的定义 public final class String implements java.io.Serializable, Comparable<String>, CharSequence String类使用final关键字修饰,限制了该类无法被继承,里面的方法也无法被重写。这是String对象不可变的第一点。 类的成员变量 /** The value is used for character storage. */ private f...
2020-07-28 23:41:48 112
原创 Java基础之面向对象编程--多态
多态 1、方法的多态性 * 重载 * 重写 2、对象的多态性:父子实例之间的转换处理 * 对象向上转型:父类 父类实例 = 子类实例; * 对象向下转型:子类 子类实例 = (子类)父类实例; //目的:使用子类特有的功能 多态的实现方式 基于继承的实现 基于接口的实现 实现多态的必要条件 继承 重写 向上转型 ...
2020-07-28 16:19:26 50
原创 Java基础之Object类
Object: 所有类的超类 在Java中每个类都是由Object扩展而来,如果没有明确指出超类,Object就被认为是这个类的超类。 equals() hashCode() toString() equals()方法 Object类中equals()方法源码 public boolean equals(Object obj) { return (this == obj); } Object类中equals()方法仅判断两个对象是否具有相同的引...
2020-07-28 15:40:36 135
原创 Java基础之面向对象编程--继承
继承 即 在已有结构的基础上进行功能的扩充 假如你在一个公司工作,公司中经理和普通员工的待遇有些差异,但他们之间也存在很多共同的地方。例如,他们都领取薪水。而经理在完成了预期的业绩之后还能额外得到奖金。 这种情形 就需要用到继承。为经理新建一个类,以便增加一些新的功能,同时可以重用普通员工类中已经编写好的部分。 继承的目的 代码重用,子类重用父类代码 功能扩充,子类扩充父类功能 具体实例 使用extends关键字实现继承 extends表明正在构造一个新类派生...
2020-07-28 12:39:05 123
原创 Java基础之面向对象编程--封装
封装 即 属性私有化 实现步骤 将类中的变量修饰符设为private 创建getter()/setter()方法,提供公共对外访问接口 在getter()/setter()方法中加入属性控制语句 案列 public class Person { // step 1: 属性私有化 private String name; private int age; // step 2: 提供公共对外访问接口 public String getName() ...
2020-07-27 16:36:22 60
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人