如何解决其中的可见性和有序性导致的问题,这也就引出来了今天的主角——Java内存模型。一、什么是Java内存模型?导致可见性的原因是缓存,导致有序性的原因是编译优化,那解决可见性、有序性最直接的办法就是禁用缓存和编译优化,但这样虽然解决了问题,但也导致带来的性能优化都没了。因此,解决方案是:提出一套规则和方法,是程序员能在该禁用的时候禁用,不该禁用的时候不禁用。Java内存模型规范就是来解决这个问题的——提供按需禁用缓存和编译优化的方法具体来说,这些方法包括volatile、synchronized和final三个关键字,以及六项Happens-Before规则,这也正是本期的重点内容。二、H
Jdk8提供的函数式接口都在java.util.function包下,Jdk8的函数式类型的接口都有@FunctionInterface注解所标注,但实际上即使没有该注解标注的有且只有一个抽象方法的接口,都可以算是函数式接口。在JDK8中内置的四大核心函数式接口如下:函数式接口接口类型参数类型返回类型作用Stream流中的应用场景Consumer消费型接口Tvoid对类型为T的对象进行操作,包含方法为accpet(Tt)如forEach、peek等方法的函数式接口都是Consumer类型Supplier供给型接口无T返回类型为T的对象,包含方法为Tget()如collect等方法的某些方法重载
Jdk8提供的函数式接口都在java.util.function包下,Jdk8的函数式类型的接口都有@FunctionInterface注解所标注,但实际上即使没有该注解标注的有且只有一个抽象方法的接口,都可以算是函数式接口。在JDK8中内置的四大核心函数式接口如下:函数式接口接口类型参数类型返回类型作用Stream流中的应用场景Consumer消费型接口Tvoid对类型为T的对象进行操作,包含方法为accpet(Tt)如forEach、peek等方法的函数式接口都是Consumer类型Supplier供给型接口无T返回类型为T的对象,包含方法为Tget()如collect等方法的某些方法重载
Spring基本介绍025.简单模拟Spring基于XML配置的程序5.1需求说明自己写一个简单的Spring容器,通过读取beans.xml,获取第一个Javabean:Monster的对象,给该对象属性赋值,放入到容器中,并输出该对象信息也就是说,不使用spring原生框架,我们自己简单模拟实现,目的是了解Spring容器的简单机制5.2思路分析5.3代码实现引入dom4j.jar包MyApplicationContext.java:packagecom.li.myapplicationcontext;importcom.li.bean.Monster;importorg.dom4j.Do
Spring基本介绍025.简单模拟Spring基于XML配置的程序5.1需求说明自己写一个简单的Spring容器,通过读取beans.xml,获取第一个Javabean:Monster的对象,给该对象属性赋值,放入到容器中,并输出该对象信息也就是说,不使用spring原生框架,我们自己简单模拟实现,目的是了解Spring容器的简单机制5.2思路分析5.3代码实现引入dom4j.jar包MyApplicationContext.java:packagecom.li.myapplicationcontext;importcom.li.bean.Monster;importorg.dom4j.Do
Spring管理Bean-IOC-022.基于XML配置bean2.7通过util空间名称创建listBookStore.java:packagecom.li.bean;importjava.util.List;/***@author李*@version1.0*/publicclassBookStore{privateListbookList;//如果类中没有其他构造器,默认构造器可以不写//如果有其他构造器,则必须显示定义无参构造器publicBookStore(){}publicListgetBookList(){returnbookList;}publicvoidsetBookList(
Spring管理Bean-IOC-022.基于XML配置bean2.7通过util空间名称创建listBookStore.java:packagecom.li.bean;importjava.util.List;/***@author李*@version1.0*/publicclassBookStore{privateListbookList;//如果类中没有其他构造器,默认构造器可以不写//如果有其他构造器,则必须显示定义无参构造器publicBookStore(){}publicListgetBookList(){returnbookList;}publicvoidsetBookList(
5.Java事件处理机制5.1小球移动案例通过监听键盘按键,实现小球的移动例子:packageli.gui.even_;importjavax.swing.*;importjava.awt.*;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;/***@author李*演示小球通过键盘控制上下左右的移动-->讲解Java事件的控制*/publicclassBallMoveextendsJFrame{MyPanelmp=null;publicstaticvoidmain(String[]args){BallMovebal
5.Java事件处理机制5.1小球移动案例通过监听键盘按键,实现小球的移动例子:packageli.gui.even_;importjavax.swing.*;importjava.awt.*;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;/***@author李*演示小球通过键盘控制上下左右的移动-->讲解Java事件的控制*/publicclassBallMoveextendsJFrame{MyPanelmp=null;publicstaticvoidmain(String[]args){BallMovebal
线程基础023.继承Thread和实现Runnable的区别从java的设计来看,通过继承Thread或者实现Runnable接口本身来创建线程本质上没有区别,从jdk帮助文档我们可以看到Thread类本身就实现了Runnable接口实现Runnable接口方式更加适合多个线程共享一个资源的情况,并且避免了单继承的限制,建议使用Runnable接口3.1多线程售票问题编程模拟三个售票窗口售票100张,分别使用继承Thread类和实现Runnable接口的方法,并分析有什么问题?1.使用继承Thread的方法:packageli.thread;//使用多线程,模拟三个窗口同时售票共100张pub