
JDK
文章平均质量分 92
May的博客
这个作者很懒,什么都没留下…
展开
-
【JDK源码】java.lang包常用类详解
接下来的几天开始JDK源码的学习和总结,之前看《java编程思想》的时候看到java的基础知识有很多,其中支撑着这些基础的基础中的基础当属JDK。JDK的基础代码里面又分了很多基础的模块,今天从最基础的java.lang包开始学习。本次JDK源码学习系列以JDK1.7为准。 观察JDK的源码,可以看到,java.lang包下面最为基础和常用的几个部...原创 2018-03-08 00:49:10 · 6417 阅读 · 0 评论 -
【Java线程】多线程实现简单的一对一聊天
实现原理: 1、主方法:在主方法中构建一个输入流接收键盘的输入,根据接收到的输入信息判定角色是服务器端还是客户端;然后构建相应的socket,开启线程; 2、线程-坚守键盘阵地:接收键盘的输入,将从键盘输入的信息写入到网络中去; 3、线程-坚守网络阵地:从网络中读入信息,并将其打印到控制台;代码示例: GoodTcp.java:package com.lmb;import j...原创 2015-05-28 19:56:15 · 2980 阅读 · 0 评论 -
【Java线程】进程与线程
进程与线程的区别1、简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。2、线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提...原创 2015-05-26 23:05:18 · 929 阅读 · 0 评论 -
【JDK源码】java.io包常用类详解
看完java.io的JDK源码,在网上发现一篇关于java.io中的类使用的文章总结的很全面,看完之后在原文的基础上加了一些自己的总结如下构成了本篇文章。原文地址 一、Java Io流 1. Java Io流的概念 java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。在java中把不同的输入/输出源(键盘,文件,网络连...原创 2018-03-10 19:55:59 · 12060 阅读 · 5 评论 -
【JDK源码】java.util.concurrent.atomic包常用类详解
java.util.concurrent.atomic原子操作类包里面提供了一组原子变量类。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个另一个线程进入,这只是一种逻辑上的理解。实际上是借...原创 2018-03-13 22:01:58 · 5306 阅读 · 0 评论 -
java集合框架总结
一、java容器类库的简图先给出一张java容器类库的简图(不包括抽象类和遗留构建),只包含你在一般情况下会碰到的接口和类。 你可以看到,其实只有四种容器:Map,List,Set和Queue,它们各有两到三个实现版本(Queue的java.util.concurrent实现没有包括在上面这张图中)。常用的容器用黑色粗线框表示。点线框表示接口,实线框表示普通的(具体的)类。带有空心...原创 2016-09-04 22:03:07 · 1393 阅读 · 0 评论 -
【Java并发编程】并发之痛 Thread,Goroutine,Actor
本文基于我在2月27日Gopher北京聚会演讲整理而成,进行了一些补充以及调整。投稿给《高可用架构》公众号首发。聊这个话题之前,先梳理下两个概念,几乎所有讲并发的文章都要先讲这两个概念: 并发(concurrency) 并发的关注点在于任务切分。举例来说,你是一个创业公司的CEO,开始只有你一个人,你一人分饰多角,一会做产品规划,一会写代码,一会见客户,虽然你不能见客户的同时写代码...转载 2016-07-18 16:30:32 · 2005 阅读 · 0 评论 -
Jdk1.8新特性(一) 接口的default方法
Jdk1.8之前的接口中通常只声明方法的签名,方法的具体实现在子类中进行。Jdk1.8打破了这样的用法:接口中可以实现具体的方法体,只需要加上关键字static或者default修饰即可。1)使用static来修饰的称之为静态方法,静态方法通过接口名来调用;2)使用default来修饰的称之为默认方法,默认方法通过对象实例来调用;静态方法和默认方法都有自己的方法体,用于提供一套默认的实现,这...原创 2019-02-21 19:24:13 · 2087 阅读 · 1 评论 -
Jdk1.8新特性(二)——lambda表达式(参数列表)->{}和函数式接口@FunctionalInterface
Jdk1.8新增lambda表达式是为了简化代码,主要用于简化匿名实现类,为其提供一种更加简洁的写法。Lambda表达式在swift语言中被称为代码块,lambda表达式可以认为是一种特殊的接口,是匿名实现类的简写,该接口必须只有一个抽象方法。作用:1)简化匿名实现类的书写,实现接口抽象方法;2)作为函数中的参数来传递;语法结构:(参数类型 参数名1,参数类型 参数名2,……参数类型 参...原创 2019-02-21 19:38:08 · 1207 阅读 · 0 评论 -
Jdk1.8新特性(三)——方法引用::
Lambda表达式可以用来创建匿名方法,有时候使用lambda表达式仅仅是调用一个已存在的方法:Arrays.sort(stringsArray,(s1,s2)->s1.compareToIgnoreCase(s2));在java8中,可以直接通过方法引用的来简写lambda表达式中已经存在的方法:Arrays.sort(stringsArray,String::compareTo...原创 2019-02-21 19:51:27 · 1822 阅读 · 0 评论 -
jdk1.8新特性(四)——Optional
在我们的开发中,NullPointerException可谓是随时随处可见,为了避免空指针异常,我们常常需要进行一些防御式的检查,所以在代码中常常可见if(obj != null) 这样的判断。JDK1.8为我们提供了一个Optional类,Optional类能让我们省掉繁琐的非空的判断。Optional中的方法汇总使用示例:package com.example.jdknewuse;...原创 2019-02-21 20:20:03 · 1026 阅读 · 0 评论 -
【Java线程】互斥 同步 异步 并发 多线程的区别与联系
1. 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥;2. 互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。3. 同步:进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同...原创 2015-05-28 21:10:21 · 1352 阅读 · 0 评论 -
【Java线程】简单实现带界面的一对一聊天
实现原理:1、构建好窗体,在窗体中创建好相应的布局和控件; 2、为相应的控件(按钮:监听、连接、发送)添加事件; 3、使用到两个线程:a、监听线程:获取服务器端输入的端口号,构建socket,监听相应端口,等待客户端来连接;b、坚守网络阵地的线程:从网路中获取信息,并将其写出到屏幕;源码如下:JFrameTcp.java/** * @author lmb * 实...原创 2015-05-29 20:20:43 · 3494 阅读 · 1 评论 -
【Java集合学习系列】HashMap实现原理及源码分析
HashMap特性hashMap是基于哈希表的Map接口的非同步实现,继承自AbstractMap接口,实现了Map接口(HashTable跟HashMap很像,HashTable中的方法是线程安全的,也就是同步的,而HashMap是非同步的,这是唯一的区别),此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashM...原创 2017-08-30 23:41:55 · 572 阅读 · 0 评论 -
【动态代理】从源码实现角度剖析JDK动态代理
相比于静态代理,动态代理避免了开发人员编写各个繁锁的静态代理类,只需简单地指定一组接口及目标类对象就能动态的获得代理对象。动态代理类的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以不存在代理类的字节码文件。代理类和委托类的关系是在程序运行时确定。 关于JDK的动态代理,最为人熟知的可能要数spring AOP的实现,默认情况下,Spring AOP的实现对于接口来说就是使用的JDK的动...原创 2017-07-12 21:53:52 · 816 阅读 · 0 评论 -
【定时任务】JDK java.util.Timer定时器的实现原理
在程序中简单实用Timer的方法,参考学习。 定时任务,也叫定时器,是指在指定的时间执行指定任务的机制,类似于Windows自带的计划任务。JDK中提供了定时器的支持—java.util.Timer,下面我们来系统学习一下它的实现原理。Timer主要由三个部分组成: 任务TimerTask、任务队列TaskQueue和 任务调试者TimerThread。多个任务单元 TimerTask按照一...原创 2016-04-25 21:52:02 · 1328 阅读 · 0 评论 -
【Java并发编程】java高并发的解决方案(一)
对于我们开发的网站,如果网站的访问量非常大的话,我们就需要考虑相关的并发访问问题了。而且并发问题也是中高级工程师面试中必问的问题,今天我们就来系统学习一下。为了更好的理解并发和同步,我们先学习两个重要的概念:同步和异步。1、同步和异步的区别和联系所谓同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是处于阻塞状态的,只有接受到返回值或消息之后才往下执行其他的...原创 2017-11-06 23:25:13 · 5679 阅读 · 1 评论 -
【Java线程】线程池的原理和实现
1、为什么要使用线程池?线程池是Java5提供的一个新技术,方便我们快速简洁的定义线程池。诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。请求以某种方式到达服务器,这种方式可能是通过网络协议(例如 HTTP、FTP 或 POP)、通过 JMS 队列或者可能通过轮询数据库。不管请求如何到达,服务器应用程序中经常出现...原创 2016-04-25 21:47:07 · 973 阅读 · 0 评论 -
【Java线程】线程安全
线程安全原创 2016-03-14 12:58:23 · 683 阅读 · 0 评论 -
【Java并发编程】java并发框架Executor学习笔记
Java SE5的java.util.concurrent包中的执行器(Executor)将为你管理Thread对象,从而简化了并发编程。Executor在客户端和执行任务之间提供了一个间接层,Executor代替客户端执行任务。Executor允许你管理异步任务的执行,而无须显式地管理线程的生命周期。Executor在Java SE5/6中时启动任务的优选方法。Executor引入了一些功能类来...转载 2016-01-21 14:59:19 · 950 阅读 · 0 评论 -
【Java线程】Thread && Runnable必知必会
1、Java中线程的创建有两种方式: 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中; 通过实现Runnable接口,实例化Thread类;(1)、继承Thread类/** * 继承Thread类,我们相当于拿出三件事:即三个卖票5张的任务分别分给三个窗口, * 他们各做各的事各卖各的票各完成各的任务,因为MyThread继承...原创 2015-06-20 16:51:21 · 1040 阅读 · 2 评论 -
【Java线程】线程同步—synchronized & Lock
同步的实现当然是采用锁了,java中使用锁的两个基本工具是 synchronized 和 Lock。==========================================synchronizedjava语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象object中的这个synch...原创 2015-05-30 22:24:46 · 871 阅读 · 0 评论 -
【Java线程】线程协作实现多对多聊天
有关线程协作的具体问题,请查看本人其他博客,链接如下: http://blog.youkuaiyun.com/lmb55/article/details/46274165一对多聊天(一台服务器对多台客户机): 原理图: 多对多聊天:(相当于群聊,客户端对客户端)实现一(服务器端):原理: 服务器端有多个socket,各socket对间不是独立的,从一个socket接受的信息,需要转发到...原创 2015-05-30 14:32:08 · 1233 阅读 · 0 评论 -
【Java线程】线程协作
通过一个经典的例子—生产者与消费者模型来理解一下线程的协作:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态。然后等待...原创 2015-05-30 14:11:31 · 1131 阅读 · 0 评论 -
jdk1.8新特性(五)——Stream
转载自:https://mp.weixin.qq.com/s/adKZrOe6nFEmuADHijsAtA在Java中,集合和数组是我们经常会用到的数据结构,需要经常对他们做增、删、改、查、聚合、统计、过滤等操作。相比之下,关系型数据库中也同样有这些操作,但是在Java 8之前,集合和数组的处理并不是很便捷。不过,这一问题在Java 8中得到了改善,Java 8 API添加了一个新的抽象称为流...转载 2019-03-14 19:29:48 · 667 阅读 · 0 评论