- 博客(38)
- 收藏
- 关注
原创 自定义异常
3.1 概述为什么需要自定义异常类:我们说了Java中不同的异常类,分别表示着某一种具体的异常情况,那么在开发中总是有些异常情况是SUN没有定义好的,此时我们根据自己业务的异常情况来定义异常类。例如年龄负数问题,考试成绩负数问题等等。在上述代码中,发现这些异常都是JDK内部定义好的,但是实际开发中也会出现很多异常,这些异常很可能在JDK中没有定义过,例如年龄负数问题,考试成绩负数问题.那么能...
2019-12-02 01:45:17
202
原创 异常的处理
Java异常处理的五个关键字:try、catch、finally、throw、throws2.1 抛出异常throw在编写程序时,我们必须要考虑程序出现问题的情况。比如,在定义方法时,方法需要接受参数。那么,当调用方法使用接受到的参数时,首先需要先对参数数据进行合法的判断,数据若不合法,就应该告诉调用者,传递合法的数据进来。这时需要使用抛出异常的方式来告诉调用者。在java中,提供了一个t...
2019-12-01 02:39:01
693
原创 什么是异常
1.1 异常概念异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是:异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。异常指的并不是语法错误,语法...
2019-11-30 15:45:58
3906
转载 强大的Mybatis动态SQL
https://blog.csdn.net/qq_40490518/article/details/80734373
2019-10-30 15:30:35
162
原创 Spring框架简介
Spring是什么Spring是分层的Java EE/SE应用 full-stack轻量级开源框架,以IOC(反转控制)和AOP(面向切面)为内核,提供了展现层Spring MVC和持久层Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架.Spring的发展历程1997年,IBM提出了...
2019-10-22 22:41:28
211
原创 Eureka介绍
Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务发现功能.Eureka包含两个组件:Eureka Server和Eureka Client.Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服...
2019-10-14 14:52:44
452
原创 SpringCloud简介
这两天博主来上海去面试 被问到了Spring Cloud相关问题,频频打脸啊,实在是忘记了很多,上一次搭建Spring Cloud框架还是一年前,时隔一年忘了很多,所以痛定思痛不但要重新搭建框架并且也要写出博客,日常看一下怕自己以后工作稳定后不思进取乐不思蜀.o(╥﹏╥)o什么是Spring Cloud?Spring Cloud是一系列框架的有序集合.他利用Spring Boot(最少配置,最...
2019-10-12 00:42:12
403
原创 线程池的代码实现
线程池:JDK1.5之后提供的java.util.concurrent.Executors:线程池的工厂类,用来生成线程池Executors类中的静态方法:static ExecutorService newFixedThreadPool(int nThreads) 创建一个可重用固定线程数的线程池参数:int nThreads:创建线程池中包含的线程数量返回值:ExecutorSe...
2019-10-08 07:01:12
372
原创 线程池的概念和原理
线程池思想概述我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的效果。线程池概念...
2019-10-08 05:42:41
235
原创 等待唤醒机制代码实现
包子类:package demo06.waitAndNotify.baoZi;/** * @Description: java类作用描述 * @Author: Zhiwen.Li * @CreateDate: 2019/10/7 12:49 * @UpdateUser: Zhiwen.Li * @UpdateDate: 2019/10/7 12:49 * @UpdateRemar...
2019-10-07 14:54:50
217
原创 等待唤醒机制概述
什么是等待唤醒机制: 这是多个线程间的一种协作机制。谈到线程我们经常想到的是线程间的竞争(race),比如去争夺锁,但这并不是 故事的全部,线程间也会有协作机制。就好比在公司里你和你的同事们,你们可能存在在晋升时的竞争,但更多时 候你们更多是一起合作以完成某些任务。 就是在一个线程进行了规定操作后,就进入等待状态(wait()), 等待其他线程执行完他们的指定代码过后 再将 其唤醒(notify(...
2019-10-07 11:53:06
757
原创 线程间通信
概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个 是生产,一个是消费,那么线程A与线程B之间就存在线程通信问题。为什么要处理线程间通信: 多个线程并发执行时, 在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成一件任务,并且我们 希望他们有规律的执行, 那...
2019-10-07 11:13:31
270
原创 Object类中wait带参方法和notify
进入到TimeWaiting(计时等待)有两种方式:1.使用sleep(long m)方法,在毫秒值结束之后,线程睡醒进入到Runnable/Blocked(运行/阻塞)状态2.使用wait(long m)方法,wait方法如果在毫秒值结束之后,还没有被notify唤醒,就会自动醒来,线程睡醒进入到Runnable/Blocked状态wait(long m)唤醒的方法①void not...
2019-10-06 11:18:43
365
原创 等待唤醒案例代码实现
代码:package demo06.waitAndNotify;/** * @Description: java类作用描述 * @Author: Zhiwen.Li【 * @CreateDate: 2019/10/5 16:02 * @UpdateUser: Zhiwen.Li * @UpdateDate: 2019/10/5 16:02 * @UpdateRemark: 修改内...
2019-10-05 16:30:18
327
原创 等待唤醒案例分析
线程中的Waiting(无限等待)Wating状态在API中介绍为:一个正在无限期等待另一个线程执行一个特别的(唤醒)动作的线程处于这一状态。案例:这就相当于买包子或者去麦当劳点餐:1.你告诉售货员你要吃什么套餐2.售货员给你点餐号码,此时开始调用wait()方法等待3.套餐做好了,服务员点到你的餐号让你取餐,此时开始调用notify()方法继续...
2019-10-05 15:44:47
230
原创 线程状态概述
线程状态概述:线程状态图:线程状态理解:我们创建了多个线程(新建状态)并调用start方法启动线程,这些线程有些抢到cpu执行权有些没有抢到,抢到的进入运行状态,没抢到的进入阻塞状态,如果运行状态中的线程执行完毕(run()方法结束),或者调用stop()强制关闭线程,或者run()方法中产生异常,则会进入死亡状态.如果线程在运行状态执行时调用sleep(long)或者wait(lon...
2019-10-05 11:39:46
189
原创 解决线程安全问题:Lock锁
解决线程安全问题第三种方案:Lock锁java.util.concurrent.locks.Lock 机制提供了比synchronized代码块和synchronized方法更广泛的锁定操作同步代码块/同步方法具有的功能Lock都有,除此之外更强大,更体现面向对象。Lock锁也称同步锁,加锁与释放锁方法化了,如下:public void lock() :加同步锁。public void ...
2019-10-05 10:04:34
497
原创 解决线程安全问题:同步方法
解决线程安全问题第一种是:同步代码块第二种就是:同步方法定义:用synchronized修饰的方法就叫做同步方法,保证一个线程执行该方法的时候,其它线程只能在方法外等着.格式:修饰符 synchronized 返回值类型 方法名(参数列表){可能会产生线程安全问题的代码(访问了共享数据的代码)}代码实现:实现类:public class RunnableImpl implemen...
2019-10-02 10:54:24
257
原创 同步技术的原理
同步技术的原理:使用一个锁对象,这个锁对象叫同步锁,也叫对象锁,也叫对象监视器.程序中我们创建三个线程(t0、t1、t2),这三个线程同时抢夺cpu的执行权,谁抢到了谁就执行cpu的run方法.1.t0抢到了cpu的执行权,执行run方法,而我们把同步代码块写在了run方法中,所以在执行run方法时会遇到synchronized代码块,这时t0会检查synchronized代码块是否有锁对...
2019-09-23 04:43:03
352
原创 解决线程安全问题:同步代码块
因出现线程安全问题,会出现不存在的数据以及重复的数据,解决线程安全问题的其中一种方案:使用同步代码块.格式:synchronized(锁对象){可能出现线程安全问题的代码(访问了共享数据的代码)}注意:1.同步代码块中的锁对象,可以使用任意的对象2.必须保证多个线程使用的锁对象是同一个3.锁对象的作用:把同步代码块锁住,只让一个线程在同步代码块中执行代码实现:运行后结果并未出...
2019-09-23 02:41:05
565
原创 线程安全问题产生的原理
根据线程安全问题的代码实现,*一、关于卖出不存在的票这里有t0、t1和t2三个线程一起抢cpu的执行权,谁抢到谁就可以执行我们一步一步跟进这个结果:直接到产生问题的地方:假设程序运行了一会,我们的共享资源ticket字段执行到了1之后:1.t0线程抢到了cpu的执行权,进入到run方法中执行if语句,因为if中有sleep方法,所以失去了cpu的执行权进行睡眠.2.t2线程抢到了c...
2019-09-23 02:03:59
350
原创 线程安全问题的代码实现
多线程的安全问题在于多线程程序中可以访问共享数据.下面是模拟多线程可共享数据的安全问题代码:/* 实现卖票案例*/public class RunnableImpl implements Runnable{ // 定义一个多线程贡献的票源 private int ticket = 100; // 设置线程任务:卖票 @Override publi...
2019-09-22 03:52:20
344
原创 线程安全问题的概述
假设电影院卖票场景:一个窗口卖100张票,这是没有问题的------单线程多个窗口一起卖票,但是卖的票不同,这也是不会出现问题的------多线程程序,但没有访问共享数据多个窗口一起卖票,卖的票是一样的,这就会出现安全问题------多线程程序,可以访问共享数据...
2019-09-22 03:07:26
300
原创 匿名内部类形式创建多线程
创建多线程的方式有两种,而创建多线程的形式还有一种就是匿名内部类,下面分别用两种创建方式的匿名内部类形式给大家演示一下:1.继承Thread的匿名内部类形式创建线程2.实现Runnable的匿名内部类形式创建线程...
2019-09-21 04:55:55
239
原创 Thread与Runnable的区别
创建多线程有两种方式,一种是继承Thread类,一种是实现Runnable接口.两者的区别其实就是接口与类的区别,相比而言,接口比类更有优势.实现Runnable接口创建多线程程序的好处:1.避免了单继承的局限性一个类只能继承一个类,类继承了Thread就不能继承其他的类了,而实现了Runnable接口,还可以继承其他的类,实现其他的接口.2.增强了程序的扩展性,降低了程序耦合性...
2019-09-21 01:15:34
276
原创 线程睡眠
Thread类中有一个静态方法:public static void sleep(long millis)此方法的作用是:使当前的线程以指定的毫秒数暂时停止执行,毫秒数结束后,线程继续执行.我把睡眠套在循环内,设置成1000毫秒(就是1秒),也就是1秒循环一次.运行之后我第一张截图运行到5时,右边时间显示为27秒.第二张截图运行到36,右边时间运行到58秒.证实为一秒循环一次,sleep...
2019-09-20 10:48:51
225
原创 设置线程名称
设置线程名称有两种方法:1.使用Thread类中的setName方法改变线程名称:在main中设置线程名字:2.使用带参构造方法设置线程名称创建一个带参数的构造方法,参数传递线程的名字;调用父类带参构造,并把线程名称传递给父类,让父类给子类起一个名字,分配新的Thread对象....
2019-09-20 09:19:48
2163
原创 获取线程名称
有两种方式,第一种方式:使用Thread类中的getName方法直接可以获取本线程的名字,在main中每创建一个新的线程并调用新线程的start方法,就会执行新线程的run方法,而run方法中有我们打印的getName方法所得出来的当前线程名.当然,也可以在main中获取并打印当前线程名称第二种方式:先使用Thread类中currentThread静态方法获取当前正在执行对象的引用,再用...
2019-09-20 08:14:28
9759
2
原创 多线程运行原理
Java的线程调度为抢占式调度,打印出来的多线程为随机性打印结果.下面我们解释一下多线程情况下的随机性打印结果:当我们运行程序时,JVM找OS开辟一条main方法通向cpu的路径,这条路径叫主线程,cpu通过主线程执行main方法.而main方法中我们创建了新的线程,新线程开辟了一条通向cpu的新路径,用来执行run方法.(不知道run方法的请看如何创建多线程)此时对于cpu而言就有了两条...
2019-09-19 23:25:04
389
原创 创建多线程
创建多线程有两种方式:第一种创建方式:1.创建Thread的子类2.重写run方法并设置线程任务3.创建我们自定义的新线程对象4.调用start方法运行该对象的线程下图是4个线程得出来的部分结果:由此可以看出线程之间互不影响.下图是把一个线程启动了两次我们看一下结果:结果报错了,说明同一个线程并不能启动两次.第二种创建方式:...
2019-09-19 04:39:06
320
原创 什么是主线程?
主线程:是执行主(main)方法的线程.单线程程序:java程序中只有一个线程,执行从main方法开始,从上到下依次执行.主线程的概念:JVM执行main方法,main方法会进入到栈内存,JVM会找操作系统开辟一条main方法通向cpu的执行路径,cpu就可以通过这个路径来执行main方法,而这个路径有一个名字,叫main(主)线程....
2019-09-18 22:59:41
5671
原创 什么是线程调度?
线程调度有两种:1.分时调度分时调度就是所有线程轮流拥有(使用)cpu的使用权,平均分配每个线程占用cpu的时间2.抢占式调度抢占式调度就是优先让优先级高的线程使用cpu,如果线程的优先级相同,则会随机选择一个,所以谁的优先级高,谁抢夺cpu的几率就越大,从而优先级高的占用cpu的时间会更长,Java为抢占式调度.抢占式调度使cpu会在多个进程中、多个线程中来回跳转,其速度非常快:1/n...
2019-09-18 03:05:57
4943
原创 什么叫线程?
首先,从电脑的硬件CPU说起,cpu是中央处理器,是计算数据用的,相当于人类的大脑,指挥着电脑软件和硬件干活.什么叫线程?举个例子:腾讯电脑管家中有病毒查杀,清理垃圾,电脑加速等功能,腾讯电脑管家是一个被加载进内存的程序,所以它是进程,而这个进程中每一个功能启动所产成的任务都可以开启通往cpu的执行路径,而这些执行路径则是线程.换句话说就是:线程属于进程,进程中至少有一个线程负责程序的执行....
2019-09-18 02:29:27
1537
原创 什么是进程?
电脑中有硬盘(ROM)和内存(RAM),程序没有运行时储存在硬盘中,等到程序运行时,为了使程序可以快速运行,则程序被加载到内存中,那么被加载到内存中的程序我们叫它为进程....
2019-09-18 01:52:43
241
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人