第六章 Java 8 与并发 1.函数式编程 函数作为一等公民: 将函数作为参数传递给另外一个函数这是函数式编程的特性之一. 函数可以作为另外一个函数的返回值,也是函数式编程的重要特点. 无副作用: 函数的副作用是指在函数调用过程中除了给出了返回值以外还修改了其他函数的外部状态. 申明式: 函数式编程是申明式编程,不再需要提供明确的指令操作,所有细节指令将会更好的被程序库所封装,只要提出要求申明用意即可. 不变的对象: 在函数式编程中,几乎所有传递的对象都不会被轻易修改. 易于并行: 由于对象都…
二.Java并发机制底层实现原理 这里是我的<Java并发编程的艺术>读书笔记的第二篇,对前文有兴趣的朋友可以去这里看第一篇:一.并发编程的目的与挑战 有兴趣讨论的朋友可以给我留言! 1.Volatile关键字 volatile的意义与定义 volatile和synchronized这两个关键字在并发编程中都扮演着极为重要的角色,这里我会先讨论volatile. volatile是轻量级的synchronized,它在开发中保证了共享变量的可见性和与其相关指令的有序性. 可见性就是指当某个共享…
<深入了解java虚拟机>高效并发读书笔记--Java内存模型,线程,线程安全 与锁优化 本文主要参考<深入了解java虚拟机>高效并发章节 关于锁升级,偏向锁,轻量级锁参考<Java并发编程的艺术> 关于线程安全和线程安全的程度参考了<Java并发编程实战> 图片参考https://www.processon.com/u/5dee0443e4b093b9f775065c#pc 一丶Java内存模型 1.概述 多任务处理已经是操作系统的必备技能,计算机被要求…
<<Java RESTful Web Service实战>> 读书笔记 第一章   JAX-RS2.0入门 REST (Representational State ransfer) 表述性状态转移 REST 具有跨平台跨语言的优势 RPC请求都是HTTP协议的POST方法,使用SOAP协议和HTTP协议 RPC 是面向方法的调用 REST 是面向资源状态的 架构风格  RPC.REST.MVC JAX-RS .JAX-WS Jersey 第二章JAX-RS2.0快速实现 J2SE…
发现自己有很多读书笔记了,但是一直都是自己闷头背,没有输出,突然想起还有博客圆这么个好平台给我留着位置,可不能荒废了. 此文读的书是<Jvava并发编程的艺术>,方腾飞等著,非常经典的一本书,本笔记是一边复习笔记,一边对照书本上的勾画重点,互相补充得来. 一.并发编程的目的与挑战 并发编程的目的只有一个:更充分的利用好计算资源,让程序运行的更快更有效率 请把这个目的牢记在心,因为,并不是启动更多的线程就能让程序最大限度的并发执行的,因为配合,甚至管理更多的线程本身也是有开销的.所以至少来说,利…
说明 这里是阅读<Effective Java中文版第二版>的读书笔记,这里会记录一些个人感觉稍微有些重要的内容,方便以后查阅,可能会因为个人实力原因导致理解有误,若有发现欢迎指出.一些个人还不理解的会用斜线标注. 第一章是引言,所以跳过. 第二章 创建和销毁对象 第1条:考虑用静态工厂方法代替构造器 含义 静态工厂方法是指一个返回类的实例的静态方法,例如: public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE :…
今天看JVM的过程中收获颇丰,但一想到这些学习心得将来可能被遗忘,便一阵恐慌,自觉得以后要开始坚持做读书笔记了. 操作系统层面的内存管理 物理内存是一切内存管理的基础,Java中使用的内存和应用程序的内存一样是从物理内存申请下来的内存.物理内存也就是寄存器,通过地址总线与CPU相连,通常情况下地址总线与寄存器有着相同的位数,同时也决定了处理器最大可寻址的地址空间. 为了提高物理内存的利用率而产生了虚拟内存,也就是逻辑上的内存.为了保证操作系统和应用程序的稳定性,运行在操作系统中的用户程序不能访问…
1.抛出异常:throw 异常对象; 下面的代码是一个进制转换代码,可以转换为2进制和8进制,如果输入其他参数,则抛出异常. public static String transform(int value,int radix){ if(value <0 ) throw new IllegalArgumentException("需要转换的数字不是自然数!"); if(radix != 2 || radix != 8) throw new IllegalArgumentExcep…
觉得自己记忆力很烂的样子,读书不做笔记就好像没读一样,所以决定以后读技术类的书籍,都要做好笔记. 1.IP地址和域名:如果把IP地址类比成身份证号的话,域名就是持证人的名字. 2.端口:规定一个 设备有216个,也就是65536个端口,每个端口对应一个唯一的程序. 0~1024之间多被操作系统占用,所以实际编程时一般采用1024以后的端口号. 3.文档注释:指可以被提取出来形成程序文档的注释格式.格式如下: /** 注释内容 */ 4.最大公约数程序 public class MaxCommon…
1.继承Thread类 通过编写新的类继承Thread类可以实现多线程,其中线程的代码必须书写在run方法内部或者在run方法内部进行调用. public class NewThread extends Thread { private int ThreadNum; public NewThread(int ThreadNum){ this.ThreadNum = ThreadNum; } public void run(){ try{ for(int i = 0;i < 10;i ++){ T…
System 1)arraycopy int[] a = {1.2.3.4}; int[] b = new int[5]; System.arraycopy(a,1,b,3,2); //把数组a中从下标1开始的元素复制到数组b中下标为3的位置,总共复制2个元素 2)currentTimeMillis long l = System.currentTimeMillis(); //返回当前时间与1970年01月01日0时0分0秒的差值数(毫秒) 3)gc:请求系统进行垃圾回收 4)public st…
1. static 1)静态变量:Java虚拟机为静态变量开辟单独的存储空间,所以所有的对象内部的静态变量在内存中都指向同一个地址,那么不管哪个对象改变这个成员变量,所有对象中该成员变量的值都发生变化.调用的方法一般为 类名.成员变量(常量) 2)静态方法:静态方法内部只能使用静态的成员变量,调用的方法: 类名.方法名(参数) 3)静态代码块:静态代码块在该类第一次被使用时执行一次,以后再也不执行.例如: public class StaticBlock{ static{ System.out.…
String 1.toString:显示对象内容时系统自动调用的方法. public class TOSTRING { public String toString(){ return "this is toString method"; } } TOSTRING t = new TOSTRING(); System.out.println(t); 2.Math Math.函数 3.String 1)char charAt(int n)  //获得字符串索引为1的字符 String a…
方法: 1. 基本的main方法: public static void main(String[] args) 2.静态方法内部调用非静态方法:重新声明一个类,通过这个类来调用非静态方法 public class MAINMETHOD { public static void main(String[] args) { MAINMETHOD mm = new MAINMETHOD(); System.out.printf("%d", mm.max(5, 6)); } public i…
一.并发编程的挑战 上下文切换:cpu通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务.但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态.所以任务从保存到再加载的过程就是一次上下文切换. 如何减少上下文切换: 无锁并发编程 cas算法 使用最少线程 协程 避免死锁: 避免一个线程同时获取多个锁 避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源 尝试使用定时锁,使用lock.tryLock(timeout)来替代使…
Java里使用long类型的数据要在数值后面加上L,否则会作为整型解析. 引用类型 引用类型是一个对象类型,它的值是指向内存空间的引用,就是地址, 所指向的内存中保存着变量所表示的一个值或一组值. int a; a=250; //声明变量a的同时,系统给a分配了空间 引用类型只给变量分配了引用空间,数据空间没有分配.因为不知道数据是什么. MyDate today; today.day=4; //发生错误,因为today对象的数据空间未分配 引用类型变量在声明后必须通过实例化开辟数据空间,才能对…
No38 检查参数的有效性 对于公有的方法,要用Javadoc的@throws标签(tag)在文档中说明违反参数值时会抛出的异常.这样的异常通常为IllegalArgumentException.IndexOutOfBoundsException或NullPointerException. /** * ... * @throws ArithmeticException if m is less than or equal to 0 */ public BigInteger mod(BigInte…
看这本书之前,对wait和notify认识大概就是,调用wait的线程A堵塞之后,一旦另外有线程调用notify方法.线程A会立马从wait方法处返回.看完这本书后.发现自己的认识实在太肤浅了..... . 线程调用wait()后,会释放已经获得的锁. 同一时候进入Waiting状态,而非Blocked状态.唯独等待其它的线程调用notify()方法且释放锁之后.当前线程才会从wait()方法处返回.只发出通知是不够用的.还须要发出通知的线程释放锁. 然而notify()方法的调用并不意味着锁的…
第七章 虚拟机类加载机制 1.类加载的时机 虚拟机的类加载机制: 虚拟机把描述类的数据从class文件中加载到内存,并对数据进行校验.转换解析和初始化,最终形成了可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 类从被加载到虚拟机内存中开始到卸载出内存为止,他的整个生命周期包括加载.验证.准备.解析.初始化.使用和卸载七个阶段. 加载.验证.准备.初始化和卸载这5个阶段的顺序是确定的,类加载过程必须按照这种顺序按部就班的开始.而解析阶段不一定在某种情况下,可以在初始化阶段之后再开始…
第七章 虚拟机类加载机制 1.类加载的时机 虚拟机的类加载机制: 虚拟机把描述类的数据从class文件中加载到内存,并对数据进行校验.转换解析和初始化,最终形成了可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 类从被加载到虚拟机内存中开始到卸载出内存为止,他的整个生命周期包括加载.验证.准备.解析.初始化.使用和卸载七个阶段. 加载.验证.准备.初始化和卸载这5个阶段的顺序是确定的,类加载过程必须按照这种顺序按部就班的开始.而解析阶段不一定在某种情况下,可以在初始化阶段之后再开始…
线程设计模式在按其有助于解决的多线程编程相关的问题可粗略分类如下. 不使用锁的情况下保证线程安全: Immutable Object(不可变对象)模式.Thread Specific Storage(线程特有存储)模式.Serial Thread Confinement(串行线程封闭)模式. 优雅地停止线程:Two-phase Termination(两阶段终止)模式. 线程协作:Guarded Suspension(保护性暂挂)模式 .Producer-Consumer(生产者/消费者)模式.…
文章目录 第二章 Java并行程序基础 2.1 线程的基本操作 2.1.1 线程中断 2.1.2 等待(wait)和通知(notify) 2.1.3 等待线程结束(join)和谦让(yield) 2.2 volatile与Java内存模型(JMM) 2.3 线程组 2.4 守护线程(Daemon) 2.5 线程安全的概念和synchronized 第三章 JDK 并发包 3.1 同步控制 3.1.1 可重入锁(ReentrantLock) 1.锁申请等待超时 2.公平锁 3.1.2 条件(con…
一.线程管理 1.线程的创建和运行 创建线程的2种方式: 继承Thread类,并覆盖run()方法 创建一个实现Runnable接口的类.使用带参数的Thread构造器来创建Thread对象 每个Java程序都至少有一个执行线程.当运行程序的时候,JVM将启动这个执行线程来调用程序的main()方法 当一个程序的所有非守护(non-daemon)线程都运行完成的时候,这个Java程序将结束 如果初始现场(执行main()方法的线程)结束了,其余的线程仍将继续执行直到它们运行结束 如果某一个线程调…
刚看完 UNIX 第五章内容,我想按照自己的方式将自己获得的知识梳理一遍,以便日后查看!先贴上一段简单的 TCP 服务器端代码: #include <sys/socket.h> #include <netinet/in.h> #include <stdio.h> #include <error.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #d…
ClassLoader具备层次关系,且不止一种.不同的类装载器分布创建的同一个类的字节码数据属于完全不同的对象,没有任何关联 通过Class.forName(String className),能够动态加载一个类 Java程序不是一个可执行文件,而是由许多独立的类文件组成的,每一个文件对应一个Java类.此外,这些类文件并非全部都装入内存,而是根据程序需要逐渐载入. ClassLoader是JVM实现的一部分,ClassLoader包括bootstrap classloader(启动类加载器),…
第六章 Linux 驱动的工作和访问方式是 Linux 的亮点之一,Linux 系统将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中,由于大多数Linux驱动都有与其对应的设备文件,因此与Linux驱动交换数据就变成了与设备文件交换数据.介绍到如何在多种平台,使用多种方式测试Linux驱动.给出的实例是统计单词的个数,但是关键还在实现该算法的技术是Linux 驱动. (一).编写Linux驱动程序的步骤 1.建立Linux驱动骨架(装载和卸载Linux驱动)…
1. 代码重构 为什么f要代码重构 第一次代码不一定是完美的, 总会发现更优雅的写法. 代码重构需要考虑的问题 类库的修改不会破坏客户端程序员的代码. 源程序方便扩展和优化 2. 包 创建一个独一无二的报名 通常package名称的第一部分是类的创建者的返序的Intenet域名.例如; 我的域名是MindView.net,把他的顺序倒过来,并且全部转换为小写. 就是net.mindview, 一个独一无二的全局域名.然后再在下面创建模块包名 3. java访问权限修饰词 public, priv…
本文基于<深入分析Java Web 技术内幕> <深入分析Java Web 技术内幕>,作者是 许令波,电子工业出版社.本文只是记录书本当中的精彩部分,作个人回顾和技术分享,请读者支持正版! 第一章:深入Web请求过程 1.1 B/S网络架构概述 HTTP采用无状态的短连接的通信方式. 当一个用户在浏览器里输入www.taobao.com这个URL时,会请求DNS把这个域名解析成对应的IP地址,然后根据这个IP地址在互联网上找到对应的服务器,向这个服务器发起一个get请求,由这个服…
第一章 走入并行世界 1.基本概念 同步:同步方法一旦开始,调用者必须等到方法调用返回后,才能继续后续操作 异步:一旦开始,方法调用就会立即返回,调用就可以继续后续操作 并发:表示两个或者多个任务一起执行,偏重于任务交替执行,而多个任务之间还是串行的 并行:真正意义的同时进行 临界区:一种公共资源或者说是共享数据,可以被多个线程使用,但是一次只能一个线程使用 阻塞:等待其他线程释放资源 死锁:都不让出资源 活锁:都让出资源 饥饿:无法获取所需资源 2.并发级别 阻塞:当使用synchronize…
吞吐量是指,应用程序的TPS: 每秒多少次事务,QPS: 每秒多少次查询等性能指标. 吞吐量调优就是减少垃圾收集器消耗的CPU周期数,从而将更多的CPU周期用于执行应用程序. CMS吞吐调优 CMS包括Minor GC所带来的开销应该小于10%,如果垃圾收集的开销在3%或更少,说明通过调优吞吐量,提升性能的空间就极其有限了. 可用的调优方法如下: 1. 增大新生代空间,以降低Minor GC频率,减少CPU周期占用: 2. 增加老年代空间,以降低CMS频率,并可以减少老年代内存碎片: 3. 优化…