Java基础-小白之道
该专栏专注Java基础, 帮助小白入门
冷风DMW
现在有多努力,以后就有多少选择
展开
-
Java多线程详解九 ( 原子性,可见性和有序性简述 )
原子性原子性像数据库中的事务一样,要么成功,要么失败,那么我们在多线程中比如同时操作一个数据,并需要多个步骤才能结束,那么必须多个步骤全部执行完成才算成功,否则为失败。举例最经典的例子就是银行取钱了,首先我们从机器上取钱,选择了1000,然后我们的卡减去1000,机器吐出1000,在这个过程中如果卡上减完了,然后没有吐钱,那就出问题了,这样就是不具备原子性,原子性是扣钱和吐钱操作要么全部成功,要么都失败解决方案在Java中,最经典的代码就是i++操作,其实i++并不是原子操作想要在多线程的情况下原创 2020-11-26 23:13:01 · 195 阅读 · 2 评论 -
Java多线程详解八 ( Volalite关键字 )
什么是Volalite?Volalite是为了解决共享变量写入后不能被其它线程读取的关键字,即当A线程修改了共享数据后,B线程可以及时拿到最新的值,解决不可见性问题问题代码演示/** * @author LFDMW * @date 2020-11-26 21:39 */public class VolatileTest implements Runnable{ private boolean flag = false; @Override public void run原创 2020-11-26 22:06:17 · 1292 阅读 · 0 评论 -
Java多线程详解七 ( 实现Callable接口 )
之前我们讲解了Java实现多线程的两种方式:继承Thread类实现Runnable接口那么我们今天来看一下如何使用实现Callable接口的方式实现多线程代码:package wewi;import java.util.concurrent.Callable;import java.util.concurrent.FutureTask;/** * @author LFDMW * @date 2020-11-25 22:23 */public class CallAbleTes原创 2020-11-25 22:51:37 · 222 阅读 · 0 评论 -
Java多线程详解六 ( 线程通信之Lock锁使用await和signal简单使用 )
上一篇文章中讲到我们使用synchronized去实现线程安全的通信,今天我们来看一下使用Lock锁的时候能否进行线程之间的通信呢?首先先简单介绍一下本次用到的方法和类本篇文章仅简单讲解一下如何去使用,具体的源码和细节后续会另开一篇文章去讲解!Condition这是一个在Java5之后出现的工具类,可以实现类似于wait与notify一样的等待通知功能,并且支持多路与指定通知,更加灵活我们在使用notify进行通知时是由JVM随机调度的,而我们使用condition中的通知功能则可以自己指定去通知原创 2020-11-15 01:41:42 · 1466 阅读 · 0 评论 -
Java多线程详解五 ( 线程通信使用wait与notify )
我们之前学习了几种实现线程安全的方式,现在我们来使用synchronized关键字实现线程安全的等待与通知waitwait,翻译过来就是等待的意思,那么我们在Java中的作用是什么呢?wait是在Object类中的一个方法,这样我们在所有的类中都可以调用该方法,wait的作用是使当前线程进入阻塞状态并释放锁,需要调用notify唤醒notifynotify也是Object类中的一个方法,由另一个线程调用唤醒被wait阻塞的线程如果有多个线程被wait阻塞了,那么notify则会唤醒优先级最高的那原创 2020-11-15 01:18:40 · 170 阅读 · 0 评论 -
Java多线程详解四 ( 使用Lock锁解决同步问题 )
上一篇文章我们讲解了使用synchronized关键字来解决线程的同步问题,那么本篇文章我们使用Lock锁来解决同步问题在Java5之后,出了一个新的同步方式就是Lock锁来解决线程安全问题,话不多说直接上代码!代码/** * @author LFDMW * @date 2020-11-14 23:03 */public class MyLock implements Runnable { /** * 首先我们需要创建一个ReentrantLock锁对象这里可以用Lock接原创 2020-11-15 00:22:51 · 342 阅读 · 0 评论 -
Java多线程详解三 ( 同步解决线程安全问题 )
什么是线程安全问题首先我们来理解一下什么是线程的安全问题, 举一个例子, 假设我们有两台ATM机,然后A在取钱的时候发现账户里有钱,然后他全部取出来,当ATM机正在执行取钱操作的时候,B也使用了该银行卡发现账户里有钱,然后也同时进行全部取出来这个操作,这样就可能会触发线程的安全问题,两个人同时操作了一个共享的数据!那么我们如何来解决线程安全问题呢?线程的同步解决方案我们在Java中使用同步来解决线程安全问题,我们有一个关键字叫做synchronized,我们可以使用同步代码块或者同步方法的方式来解决原创 2020-11-14 15:05:36 · 182 阅读 · 0 评论 -
Java多线程详解二 ( 实现Runnable方式 )
上篇文章我们介绍了如何使用继承Thread类来使用多线程,今天我们来学习一下实现Runnable接口的方式去使用多线程我们通过查看Thread类的源码会发现,Thread类也是实现了Runnable接口的那么我们现在先看看Runnable接口里有什么我们会发现Runnable接口中只有一个run方法,那这个时候我们去看一下Thread里面的run方法这时候就会发现,其实我们Thread类的run方法则是重写了Runnable里的run方法ok,言归正传,我们怎么去使用Runnable接口来使原创 2020-11-14 14:29:37 · 493 阅读 · 0 评论 -
Java多线程详解一 ( 继承Thread方式 )
之前有简单的介绍过多线程的几种实现方式,那么我们现在开始写几篇文章详细去介绍一下多线程的实现方式和一些原理,今天先来介绍一下我们学习多线程的第一种方式,我们使用继承Thread类来实现!话不多说,直接上代码!继承Thread类基础代码// 首先我们创建一个类来继承Thread类public class MyThread extends Thread{ // 然后我们需要重写run方法(非常重要,run方法的方法体中是我们真正执行的代码) @Override public void原创 2020-11-14 00:44:19 · 611 阅读 · 0 评论 -
Java的final修饰符简单入门
final修饰符final关键字可用于修饰类,变量和方法,用于表示不可改变的意思final修饰变量时,代表该变量一旦获得了初始值就无法被重新赋值final修饰成员变量对于final修饰的成员变量,如果没有指定初始值的话,那么成员变量的之将一直是系统默认的0,false或null等,就没有了意义,所以final修饰的成员变量必须由程序员显式的制定初始值类变量:必须在静态初始化块种指定初始值...原创 2019-11-17 16:57:32 · 129 阅读 · 0 评论 -
Java8包装类简单入门
Java8包装类众所周知,Java有8种基本数据类型,这些数据类型可以进行一些简单的常规数据处理,但是有一些情况下缺难以处理,于是Java就提供了包装类,为8种基本类型定义了相应的引用类型:byte:Byteshort:Shortint:Integerlong:Longchar:Characterfloat:Floatdouble:Doubleboolean:Boolean并且...原创 2019-11-17 16:39:54 · 164 阅读 · 0 评论 -
Java面向对象之继承简单入门
继承类的继承类的继承继承是面向对象的三大特征之一,java只支持单继承,也就是每个子类只有一个父类Java的继承使用extends,被继承的类称为父类,继承的类称为子类demo:public class Apple extends Fruits{ }这里就是Apple类继承了父类Fruits,注意:子类无法继承父类的构造器重写父类方法比如父类为Fruits,Apple子类继...原创 2019-11-17 16:20:50 · 172 阅读 · 0 评论 -
Java中的String,StringBuffer,StringBuilder有什么区别?
相信有很多同学都是经常使用String的,或者也或多或少的听说过StringBuffer,StringBuilder,那么在经常遇见的面试题中(标题),到底这三个的区别是什么呢?让我们来一探究竟!String可能看过String源码的同学都知道String这个类是被final继承的类,也就是说我们创建的String对象其实是一个常量,无法修改的数据,当我们对这个string进行操作的时候,其实...原创 2019-09-12 14:38:04 · 167 阅读 · 0 评论 -
Java中的==和equals到底有什么区别?
关于标题这个问题,我想大部分同学在java面试中很大的概率都会问到,也是一个java基础的知识,那么有什么区别呢?我们一起来看一下!==用法首先我们先来介绍一下==的用法,在java中== 是对基本数据类型的内容来进行比较,也可以对相同的对象来进行比较1.在java中如果 == 比较的是基本数据类型的话,那么则是判断两个数据的内容是否相等,下面用代码展示一下:public static ...原创 2019-08-30 14:47:40 · 110 阅读 · 0 评论 -
java循环语句
java循环语句while循环语句:do while 循环语句for循环:循环语句在满足循环条件的情况下可以反复的执行一段代码,这段反复执行的代码叫做循环体,当反复执行这个循环体时,需要在合适的时候把条件改为假来结束循环,负责循环将会一直执行造成死循环。循环语句可能包括下给部分:1.初始化语句:一条或多条语句,用于完成一些初始化工作,初始化语句在循环之前执行2.循环条件:这是一个boole...原创 2019-06-18 22:11:27 · 253 阅读 · 0 评论 -
Java基本数据类型
Java基本数据类型Java的基本数据类型有八种,分为两个大类,四个小类1.数值类型数值类型包括整数类型和浮点类型以及字符类型,所以Java的基本数据类型也被称为四类八种整数类型有byte,short,int,long浮点类型有double,float字符类型为char (1个数值的字节) byte的字节数为1字节,取值范围为 负的128到正的127 ...原创 2019-06-04 18:40:22 · 330 阅读 · 0 评论 -
Java面向对象之方法详解(上)
1.方法的属性方法是类或对象的行为特征的抽象,方法也是类或对象重要的组成部分,Java中的方法是不能独立存在的,所有的方法必须定义在类里。如果在类里定义的方法使用了static修饰,那么这个方法就属于这个类,否则这个方法属于这个类的实例。类定义完成后,如果不重新编译的话,那么该类和该类的对象拥有的方法则是固定的,不会改变。执行方法时需要使用类或对象来进行调用,所有的方法都需要使用 “类.方法...原创 2019-07-08 13:41:55 · 195 阅读 · 0 评论 -
Java面向对象之类和对象
在刚刚学习java的时候,应该都会知道java语言是一种面向对象的程序设计语言,java提供了定义类,成员变量,方法等最基本的功能。java也支持面向对象的三大特征:封装,继承和多态,java中提供了private,protected和public三个访问控制修饰符来实现良好的封装,提供了extends关键字来让子类继承父类,如果访问控制允许,子类可以直接调用父类定义的方法。定义类面向对象的...原创 2019-07-03 14:27:02 · 189 阅读 · 0 评论 -
Java面向对象之方法(下)
1.递归方法一个方法体内调用自身,就被称为方法递归,方法递归包含了隐式循环,会重复执行一段代码,而且无须进行循环控制。首先先来介绍递归的特点:1.必须在某一个时候方法的返回值是确定的,即不在调用自身,否则就会类似于死循环。2.次数不能太多,否则容易造成内存溢出3.构造方法不能递归有一个很经典的题目,斐波那契数列,可以使用递归来解决,如:有一对兔子,从出生后第三个月开始每个月都生一对...原创 2019-07-16 09:32:32 · 143 阅读 · 0 评论 -
Java多线程入门 (上)
在介绍多线程之前,首先我们要先了解什么叫线程,什么叫进程?进程和线程介绍进程其实就是一个应用程序,在我们打开qq,谷歌浏览器,网易云音乐,的时候每打开一个应用程序,就会启动一个进程,那么什么是线程呢?线程其实就是进程中的某一个执行过程,一个进程中可以有多个线程.比如我们打开迅雷软件,它是一个进程,然后我们使用迅雷软件下载文件或某某电影,每一个文件或电影都使用了一个线程,这样可以同时工作,提高效...原创 2019-07-16 10:24:38 · 82 阅读 · 0 评论 -
Java面向对象之终极篇(1)
1.变量在java语言中,我们可以把变量分为成员变量和局部变量,下面来详细介绍这两个的区别1.1成员变量成员变量就是指的在类里定义的变量,成员变量也需要遵守前面文章中讲到的命名规范,成员变量被分为类变量和实例变量两种,定义成员变量的时候如果没有static修饰的就是实例变量,有static修饰的就是累变量实例变量的作用于与对应的实例的范围相同,类变量:只要类存在,程序就可以访问该类的类变...原创 2019-07-27 12:50:52 · 135 阅读 · 0 评论 -
在java中不使用第三个变量如何替换两个变量的值?
可能有些同学面试的时候会遇到一个面试题:java如何实现两个变量值交换不使用第三个变量?我们看见交换两个变量的值首先会想到用一个变量来接收,如下:public class Test01 { public static void main(String[] args) { int c = 1; int d = 2; int temp ;...原创 2019-08-08 10:10:44 · 488 阅读 · 0 评论 -
Java运算符详解
今天来介绍一下Java的基础编程必不可少的运算符:算术运算符1.+ - * / 加减乘除还有++和–以及取余%public class Demo07 { public static void main(String[] args) { int i = 2; int j = 10; int num = i + j; ...原创 2019-08-13 15:44:38 · 206 阅读 · 0 评论 -
Java的Scanner类的使用
平时上课不认真的小明在艰辛投递了数百个职位后,终于迎来了人生中的第一次面试!小明经过精心打扮,穿上帅(sao)气的西装后,就出门去准备面试,来到面试的公司,并没有见到面试官,倒是上来就被安排上了一套面试卷里面有一题:怎么用键盘输入圆的半径求圆的面积?这可给平时不听课不学习的小明整糊涂了,选择题还可以不会就选c!,这编程题怎么搞啊?于是不出意外小明的人生中第一次面试凉凉了,小明回到学校后...原创 2019-08-13 10:09:23 · 375 阅读 · 0 评论 -
Java流程控制语句篇之if分支结构
我们在日常开发中,流程控制语句是不可缺少的,都或多或少的写过流程控制语句,流程控制语句有两个基本的结构,一个是分支结构,比如 if switch一个是循环结构,比如for ,while ,dowhile,foreachJava中提供了break合continue来控制循环结构编程语言最常见的程序结构是顺序结构,顺序结构就是程序从上到下逐行执行,中间没有任何判断合跳转在main方法中,...原创 2019-06-05 11:14:07 · 400 阅读 · 0 评论