12 2017 档案
摘要:序言 已经很久没有写设计模式了。额。。。 本来还想着能多看一点设计模式总结一下呢,然后转眼已经马上要到2018了。有点尴尬啊。 不过也算有收获,毕竟看了别的书籍,也看了一部分Spring的源码,看起来真是晦涩难懂啊。。。 这次写这个模板方法模式也是基于看书过程中的一些契机的,那就是同步锁的一些依赖实
阅读全文
摘要:Lock锁 锁是用来控制多个线程访问共享资源的方式。 一般来说一个锁可以防止多个线程同时访问共享资源(但有些锁可以允许多个线程访问共享资源,如读写锁)。 在Lock接口出现前,java使用synchronized关键字实现锁的功能,但是在javaSE5之后,并发包中提供了Lock接口(以及其实现类)
阅读全文
摘要:原因: 查看是否配置文件中有以下配置: 其他原因
阅读全文
摘要:最近在学习的时候,会发现一些很奇怪的现象。 比如加了@Override注解竟然报错。 找了一下发现了问题所在:在IDEA中: Ctrl+shift+alt+s然后找到Modules模块,在language level中选择6 -@Override in interfaces即可 实际上知道JDK1.
阅读全文
摘要:装配(wiring):创建应用对象之间协作关系的行为。这是依赖注入的本质。 Spring配置的可选方案 Spring提供了三种装配机智: 1)在XML中进行显示装配 2)在java中进行显示装配 3)隐式Bean发现机制和自动装配 自动化装配 Spring从两个角度来实现自动化装配: 1)组件扫描(
阅读全文
摘要:本文参考javaEE开发的颠覆者SpringBoot实战第一版 基本配置 入口类和@SpringBootApplication Spring Boot通常有一个名为*Application的入口类,且入口类有一个main方法,这个main方法就是标志的java应用入口方法。调用main方法就可以启动
阅读全文
摘要:就是新建了一个Springboot项目,但是无法正常访问。 关闭防火墙试了,mvn方式启动试了,换端口试了。然后用Tomcat的start.bat测试发现localhost是可以访问的。 上网找到各种各样关于localhost无法访问的解决方式发现都没有 感到一脸懵逼。于是再次新建了一个新的spri
阅读全文
摘要:背景概念: 1)横切关注点:散布在应用中多处的功能称为横切关注点 2)通知(Advice):切面完成的工作。通知定了了切面是什么及何时调用。 5中可以应用的通知: 前置通知(Before):在目标方法被调用前调用通知功能。 后置通知(After):在目标方法完成后调用通知,此时不会关系方法输出什么。
阅读全文
摘要:http://blog.csdn.net/liuchuanhong1/article/details/60873295 http://blog.csdn.net/lyg_come_on/article/details/78133202
阅读全文
摘要:本博客参考博文地址。 1.pom依赖: 引入springboot starter包即可 2.启动类启用定时任务: 在启动类上加注解:@EnableScheduling即可实现。 3.创建定时任务实现类: 定时任务1: 定时任务2: 结果如下: 参数说明: @Scheduled接受两种定时的设置: 一
阅读全文
摘要:Spring框架的四大原则: 1)使用POJO进行轻量级和最小侵入式的开发。 2)通过依赖注入和基于接口编程实现松耦合。 3)通过AOP和默认习惯进行声明式编程。 4)使用AOP和模板(template)减少模式化代码。 1.1依赖注入: 控制反转(Inversion of Control - Io
阅读全文
摘要:第四章并发编程基础 4.1线程简介 4.2启动与终止线程 4.3线程间通信 4.4线程应用实例 java语言是内置对多线程支持的。 为什么使用多线程: 首先线程是操作系统最小的调度单元,多核心、多个线程可以同时执行,能够提升程序性能。但是过多的线程也会导致问题(效率下降,死锁)。 4.1线程简介 4
阅读全文
摘要:并发编程的挑战 1.1上下文切换 1.2死锁 1.3资源限制的挑战 1.4本章小结 1.1上下文切换 1.1.1多线程一定快吗 1.1.2测试上下文切换次数和时长 1.1.3如何减少上下文切换 1.1.4减少上下文切换实战 支持多线程的处理器不论核心数目都支持多线程执行代码(单核心当然也支持)。 多
阅读全文
摘要:这本书大致上是看完了,不过第七章结束的匆匆忙忙很不好。 不过好在还是看完了,勉强算吧。 回想这一年,挺感慨的,心里一直谋求着进步,却很难行动起来。 仔细想想确实啊,想一直进步肯定要牺牲自己的业余时间,虽然一点也不排斥学习,但是你得承认瘫起来的感觉很棒。 人啊,真的一点都不能停歇,一旦你歇下来很可能对
阅读全文
摘要:本章主要知识点: 1)线程组的使用 2)如何切换线程状态 3)SimpleDateFormat类与多线程的解决方法 4)如何处理线程异常。 这本书基本来到了终点,其实在第四章来说,核心(基础)的线程知识就已经结束了。 剩下的是一些关于线程方面的应用与场景:比如定时器以及多线程中的单例问题。 而这一章
阅读全文
摘要:目录 1.0立即加载/“饿汉式” 2.0延迟加载/“懒汉式” 3.0使用静态内置类实现单例模式 4.0序列化与反序列化的单例模式实现 5.0使用static代码块实现单例模式 6.0使用enum枚举数据类型实现单例模式 7.0完善使用enum枚举实现单例模式 1.0立即加载/“饿汉式” 立即加载:实
阅读全文
摘要:单例模式使用比较多,而且挺重要的。(如果不自己搭平台的话,就应该只会在面试中用到吧) 虽然自己在设计模式的模块已经总结过单例模式,但是还是有些东西没有摸透,这次通过这篇文章的学习来重新学习(温习)一下。 希望能有更透彻的理解。
阅读全文
摘要:定时器Timer的使用 1.1方法schedule(TimerTask task, Date time)的测试 1.2方法schedule(TimerTask task, Date firstTime, long period)的测试 1.3方法schedule(TimerTask task, lo
阅读全文
摘要:定时器很重要。 上家公司有用的,是用来做定期数据同步的。 以前老同学有用到,曾经就定时器讨论过一次,还给过一次他我关于spring-task的总结。 但是并没有意识到定时器与多线程的关系,或者说,上一次再学定时器的时候,还没有多线程方面的一些铺垫。这次重新学习多线程,再与定时器,相信会对定时器有一个
阅读全文
摘要:因为个人的工作习惯,想要做一个app,是关于工作(生活)日志的。 目前有几个预想的功能吧。 1.按天展示自己的每日安排。 2.每到周末展示自己的周末安排。 1的需要: 是由于,每天总有那么一点两点的细碎东西想要看一下或者了解一下,但是如果不及时记录的话很容易忘掉。记录下来更友好。 而且随着年纪的增长
阅读全文
摘要:第一节使用ReentrantLock类 1.1使用ReentrantLock实现同步:测试1 1.2使用ReentrantLock实现同步:测试2 1.3使用Condition实现等待/同步错误用法与解决 1.4正确使用Condition实现等待/通知 1.5使用多个Condition实现通知部分线
阅读全文
摘要:本章主要是讲解:使用Lock对象也能实现同步效果,而且使用起来更方便。 主要掌握两个方面: ReentrantLock类的使用 ReenTrantReadWriteLock类的使用
阅读全文
摘要:第一节等待/通知机制 1.1不使用等待/通知机制实现线程间的通讯 1.2什么是等待/通知机制 1.3等待/通知机制的实现 1.4方法wait()锁释放与notify()锁不释放 1.5当interrupt()遇到wait()方法 1.6只通知一个线程 1.7唤醒所有线程 1.8方法wait(long
阅读全文
摘要:线程是操作系统中独立的个体,但是这个个体如果不经过处理就不会成为一个整体。 县城间的通信就是成为整体的必用方案之一。 线程通信后,系统间的交互性会更强大,在大大提高CPU效率的同时,还可以使程序员对各线程任务在处理时,进行有效的监督和把控。 核心技术点: 使用wait()/notify()实现线程间
阅读全文
摘要:第一节synchronized同步方法目录 1.1方法内的变量为线程安全的 1.2实例变量非线程安全 1.3多个对象多个锁 1.4synchronized方法与锁对象 1.5脏读 1.6synchronized锁重入 1.7出现异常,锁自动释放 1.8同步不具有继承性 1.1方法内的变量为线程安全的
阅读全文
摘要:目录: 1.1进程、多线程的概念,及线程的优点 1.2多线程的使用 1.3currentThread()方法 1.4isAlive()方法 1.5sleep()方法 1.6getId()方法 1.7停止线程 1.8暂停线程 1.9yield()方法 1.10线程的优先级 1.11守护线程 1.1进程
阅读全文
摘要:过多的代码应该是放在学习中,而笔记的最初目的是为了凝练知识点或者理论点而来的,所有写到现在有点跑偏的感觉。 以后笔记可能就不会出现代码,或者说过多的代码,而是以个人的理解来记录整理的知识点。
阅读全文
摘要:异常代码: 已解决。 百度了一下400代表无法解析请求。 说明请求是有问题的,如果发送的请求端没有问题。 那么就去控制器中查看是否有异常。 本例中的问题是控制器中的参数使用注解异常, 错误注解:@RequestParam 正确注解:@RequestBody 注解修改后就能正常使用。
阅读全文
摘要:异常代码: 出现这个异常在于创建对象时,其属性并没有成功的注入。原因在于没有选择正确的开发配置文件。 因为是通过注入的方式给属性赋值的,所以一定要注意配置文件是在哪里书写的,书写的名称与注解是否相符
阅读全文
摘要:今天在做接口测试的时候遇到个异常: java.security.InvalidKeyException: Illegal key size。 感到一脸懵逼,还好网络是万能的,百度一下,简单对比一下,就找到了解决方案。然后测试之后发现也是没有问题的。 异常原因:如果密钥大于128, 会抛出java.s
阅读全文
摘要:使用synchronized虽然能够避免不同步的现象出现,但是也会出现弊端,比如代码执行时间过长,那么其他线程就必须等待该线程执行完毕释放锁之后才能拿到锁。 面对这种问题可以使用同步代码块来解决。 2.2.1synchronized方法的弊端: 任务类: 工具类: 线程代码1: 线程代码2: 执行代
阅读全文
摘要:由前言: 在第一章已经出现了非线程安全的情况。“非线程安全”其实会发生在多个线程同时对同一个对象中的实例变量进行访问时发生。产生的结果就是脏读(读到被修改过的数据)。 “线程安全”获得的实例变量是经过同步处理的,不会出现脏读的情况。 2.1.1方法内的变量为线程安全: “非线程安全”的问题存在于实例
阅读全文
摘要:本章主要介绍了java多线程中的同步,也就是如何在java语言中写出线程安全的程序。 如何在java语言中解决非线程安全的相关问题。 设计知识点: synchronized对象监视器为Object时的使用。 synchronized对象监视器为Class时的使用。 非线程安全是如何出现的。 关键字v
阅读全文
摘要:第一章的学习已经结束了。 主要是学习了一些基础的线程API操作,了解了线程的一些问题: 线程API操作: currentThread()、getName()、setpriority()、interrupt()、isInterrupted()、interrupted()、suspend()、resum
阅读全文
摘要:在Java中有两种线程,一种为用户线程,一种为守护线程。 守护线程是一种特殊的线程,它具有“陪伴”的含义,当进程中不存在非守护线程时,则守护线程自动销毁。 典型的守护线程就是垃圾回收线程。 当进程中没有线程了,则垃圾回收线程也就没有存在的必要了,自动销毁。 任何一个守护线程,都是JVM中所有的非守护
阅读全文
摘要:在操作系统中,线程是有优先级划分的,优先级较高的线程会得到相对较多的资源。 也就是说CPU会优先执行优先级较高的线程对象中的任务。 设置线程优先级有助于帮“线程规划器”确定下次选择哪一个线程来优先执行。 设置线程的优先级使用setPriority()方法,此方法在JDK的源代码如下: 在java中,
阅读全文
摘要:yield()方法的解释:放弃当前cpu资源,将它让给其他的任务去占用CPU执行时间。但放弃的时间不能确定,有可能刚刚放弃,但马上又获得CPU时间片。 线程代码: 执行代码: 执行结果(第一个为注释版本,第二个为去掉注释): 源码地址:https://github.com/lilinzhiyu/th
阅读全文
摘要:在java中,使用suspend()方法暂停线程,使用resume()方法恢复线程的执行。 1.8.1suspend与resume的使用: 线程代码: 执行代码: 执行结果: 从执行的时间来看,新开启的线程确实发生了暂停(当前线程暂停与启动的时间与另外开启的线程是一致的),并且能够成功的恢复运行状态
阅读全文
摘要:http://itchat.readthedocs.io/zh/latest/tutorial/tutorial0/。 这个是学习网址,到时候自己学一下。做个案例试试
阅读全文
摘要:线程停止:在线程处理完任务之前,停掉正在做的操作,也就是放弃当前操作。 在java中有三种方法可以实现线程的停止: 1.7.1停不了的线程 本例中调用interrupt()方法来停止线程,但是interrupt()方法并不像循环中的break关键字一样可以立即起效,interrupt()方法仅仅是在
阅读全文
摘要:getId()方法的作用是获取线程的唯一标识。 测试执行类: 结果:
阅读全文
摘要:方法sleep()的作用是在指定的毫秒数内让当前"正在执行的线程"休眠(暂停执行)。这个“正在执行的线程”是指this.currentThread()返回的线程。 注:this.currentThread()在IDE中报错,提示使用类名调用静态方法,但实际并不影响运行。 线程代码: 执行代码: 执行
阅读全文
摘要:方法isAlive()是判断当前线程是否处于活动状态。 线程代码: 运行代码: 运行结果: 方法isAlive()是测试线程是否处于活跃状态的方法, 活跃状态:线程已经启动且尚未终止。线程处于正在运行或准备开始运行的状态,就认为线程是“存活的”。 结果为false的执行代码: 执行结果: 在使用is
阅读全文