- 博客(17)
- 资源 (2)
- 收藏
- 关注
原创 java8新特性之方法引用与构造器引用
本文用使用大量内置函数式接口,可参考上篇文章:java8新特性之函数式接口使用1.使用场景当要传递给Lambda体的操作,已经存在实现的方法了,就可以使用方法引用。(抽象方法的参数列表 必须与方法引用方法的参数列表保持一致),可以理解为lambda的另一种表现形式。2. 语法使用操作符【::】将方法名和对象或类的名字分开。三种主要使用情况:1)对象::实例方法名注:消费型接口,参数类型为String,返回值为void,System.out.println(x)的参数类型也是String,返回值
2020-06-30 22:21:53 275
原创 java8新特性之函数式接口使用
我们都知道java8的主要新特性是,stream流以及lambda表达式。java8内置了很多函数式接口,但是最基本的四大函数式接口,已经足以应付绝大多数场景。今天我们讲解一下,使用lambda表达式实现java8四大内置函数式接口。一、消费型接口 Cousumer< T>Cousumer类型接口没有返回值,参数为T,执行格式为accept(T t): public static void main(String[] args) { //使用lambda表达式调用ha
2020-06-29 21:35:48 463
原创 java使用wait()和notify()实现线程通信
我们都知道线程睡眠的方法有两种,一中是Thread.sleep(),一中是Object实例化对象.wait()。今天我们着重说一下wait()的作用,我们都知道wait()如果没有参数的话线程会一直处于睡眠状态,除非主动唤醒,主动唤醒的方式有两种:notify()或者notifyAll(); 现在我们来使用wait()以及notifyAll()来实现线程通信。首先我们假定一个场景:有四个角色,分别是厨房,食客,鸡,以及存放鸡的器皿。厨房:负责将鸡烹饪好。食客:负责吃鸡。器皿:盛放烹饪好的鸡。鸡
2020-06-29 15:30:22 362
原创 jdk动态代理与CGLIB动态代理的实现与区别
上篇文章我们写了静态代理设计模式之代理模式【1】静态代理今天说一下java的动态代理。一、为什么要使用动态代理其实动态代理是弥补了静态代理的短板,静态代理需要给每一个被代理对象写一个代理类,这就需要编写大量冗余代码,而动态代理,只需要编写一个代理类,就可以代理多个不同的对象,大大减少重复代码,前提是他们实现了同一个接口。请记住,代理的主要目的是控制对目标对象的访问,而不是增强目标对象的功能。访问控制包括同步,身份验证,远程访问(RPC),懒惰实例化(Hibernate,Mybatis),AOP(事务
2020-06-29 10:47:45 349
原创 java如何避免多线程的死锁?
我们在多线程编程中,经常会遇到线程同步的问题,我们常常会选择给共享资源上锁来保持线程资源的一致性,这就会导致有可能出现死锁的可能性。package lock;//测试死锁public class TestLock { public static void main(String[] args) { Thread father = new Person("爸爸",1); Thread son = new Person("儿子",2); fathe
2020-06-28 20:56:19 420
原创 Java线程池的类型和差别
1.线程池的作用1、线程的复用:线程的创建和销毁对系统来说是巨大的开销,而用线程池管理线程能大大减少了这种不必要的开销。2、控制线程的并发数:控制线程池中线程的并发数,可以防止大量线程争夺CPU资源而造成的堵塞。3、可以根据不同场景设计不适用不同的线程池,灵活多变的提高程序效率。2.常用的集中线程池2.1 newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。这种类型的线程池特点是:工作线程的创建数量几乎没有限制(
2020-06-28 17:55:37 549
原创 设计模式之代理模式【1】静态代理
设计模式有很多,我们从最初的开始说起,今天说一下代理模式其一——静态代理。package TestProxy;/** * 设计模式之代理模式-静态代理 * create by c_pown on 2020-06-20 */public class ProxyTest { public static void main(String[] args) { //只需创建代理对象,并传入被代理对象即可实现静态代理 WiddingCompany company =
2020-06-20 22:14:11 346
原创 【详细】java如何优雅的自定义一个注解?
说到注解,我们一定都不陌生,在我们编码过程中可以说是无处不在,非常的常见。比如:@Override,@Deprecated,@Controller等等。那么我们今天来说一下如何自定义一个注解。一、注解的基本结构我们在代码里面点开一个注解看一下:package java.lang;import java.lang.annotation.*;/** * Indicates that a method declaration is intended to override a * method
2020-06-17 21:19:22 2277
原创 java进阶之反射
我们都知道java是一门静态语言,通过class文件在虚拟机里面运行。但java里面有一个反射机制,可以使java语言变成一门“准动态语言”。使用反射机制可以使java语言变得更加灵活。今天我们说一下java的反射机制。一、什么是反射(Reflection)反射(Reflection)是java被视为动态语言的关键,反射机制允许程序在执行期间,借助于Reflection Api 获取类的内部信息,并能够直接操作类的内部属性和方法。...
2020-06-16 22:06:01 453
原创 jvm类的初始化加载过程
本篇文章说一下java虚拟机类的加载过程。手先我们看一下下面的代码:package mytest;public class Test { public static void main(String[] args) { A a = new A(); System.out.println(A.m); }}class A { public static int m = 300; static { System.o
2020-06-15 19:39:33 350
原创 一篇文章掌握nginx——nginx负载均衡
前面说完了nginx的安装与配置文件的介绍以及静态项目的访问:一篇文章掌握nginx——nginx的安装一篇文章掌握nginx——nginx的配置一篇文章掌握nginx——nginx代理不同项目本次,说一下nginx的负载均衡准备工作[root@localhost webapps]# mkdir test[root@localhost webapps]# touch b.html[root@localhost webapps]# cd test[root@localhost test]#
2020-06-10 21:33:56 697 2
原创 一篇文章掌握nginx——nginx代理不同项目
前面说完了nginx的安装与配置文件的介绍一发入魂:一篇文章掌握nginx——nginx的安装一发入魂:一篇文章掌握nginx——nginx的配置
2020-06-10 20:52:35 930 1
原创 在linux环境启动多个tomcat项目
一、vim /etc/profile首先使用上面命令打开profile文件。[root@localhost bin]# vim /etc/profileexport CATALINA_BASE=/usr/src/software/apache-tomcat-7.0.70export CATALINA_HOME=$CATALINA_BASEexport TOMCAT_HOME=$CATALINA_BASEexport CATALINA_BASE=/usr/src/software1/apach
2020-06-09 21:46:09 851
原创 volatile关键字有什么用?
说道volatile关键字,大家都不陌生,它可以使一个变量在多个线程中可见;但是volatile并不能保证多个线程共同修改一个变量时所带来不一致的问题,即volatile只能保证可见性,不能保证原子性。如果既要保证可见性又要保证原子性可以使用synchronized。线程1,线程2都用到一个变量,java默认是线程1中保留一份copy,这样如果线程2修改了该变量,则线程1未必知道。要了解可见性,我们得先来了解一下 Java 内存模型。Java 内存模型(Java Memory Model,简称
2020-06-05 19:04:27 611
原创 如何正确的使用synchronized关键字
参考二哥:https://blog.csdn.net/qing_gee/article/details/106032117一、为什么使用synchronized在多线程并发修改共享数据时无法保证线程安全。synchronized关键字可以保证在某一时刻只有一个线程可以访问某个方法或者代码块,只有当前线程执行完成其他线程才能够重新拿到执行权力。下面我们来演示一下如果不是用synchronized关键字的情况下,使用多线程操作会出现什么情况。首先我们创建一个类SynchronizedMethod,里面只
2020-06-04 14:47:10 790
原创 给虚拟机Linux系统配置java环境变量
首先准备一个Linux-jdk安装包:jdk-8u131-linux-x64.tar.gz(没有的话可以去官网下载jdk下载)在usr文件加下面建一个java文件夹存放jdk文件[root@localhost /]# cd usr/[root@localhost usr]# mkdir java[root@localhost usr]# cd java/[root@localhost java]# 然后将jdk文件放进文件夹里,直接拖拽即可tar -zxvf jdk-8u131-linux
2020-06-03 20:51:00 3539
原创 Mysql批量操作数据 已存在则更新 不存在则插入
我们在编码过程中经常遇到存储数据是判断本地是否已经有数据,有数据则去更新现有的数据,没有数据才进行插入。用代码判断处理虽然可以,但是代码臃肿且效率不高。其实mysql已经给我们提供了简单粗暴的sql语法,我们来测试一下。首先创建一张表格 sys_user,主键是idCREATE TABLE `sys_user` ( `id` int(10) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `nickname` v
2020-06-01 17:52:49 5902 6
Navicat Premium_11.2.7简体中文版.rar
2020-05-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人