自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

YEN_CSDN的博客

如果真的相信什么,就要用尽全力去让它发生。

  • 博客(18)
  • 资源 (6)
  • 问答 (3)
  • 收藏
  • 关注

原创 Java注解

Java注解是插入代码中的一种注释或者说一种元数据(mete data)。这些注解信息可以在编译期使用编译期使用预编译工具进行处理,也可以运用Java的反射机制在运行时处理。注解为我们在代码中添加信息提供了一种形式化的方法。Java中的注解主要是:元注解自定义注解元注解 Java提供了四个基本的元注解类型: 这些类型在:java.lang.annotation包中 @Documente

2016-06-23 21:40:32 1984

原创 Java NIO和IO的区别

IO的主要内容FileInputStreamOutputStreamReaderWriterRandomAccessFileNIO有以下核心的数据抽象类型。BufferChannelsSelectorIO是面向流(Stream)的,NIO是面向缓冲(Buffer)的。 面向流就是每次都是流中读取一个或多个字节/字符,直至读完所有的字节/字符,不能前后移动流中的数据;面向缓冲是

2016-06-19 19:52:45 851

原创 Java反射机制

Java反射机制可以让我们在运行期检查类、接口、变量、以及方法的信息。反射机制还可以让我们在运行期实例化对象,调用方法,通过调用get/set方法设置变量的值。 那么,通过Java的反射机制我们能获取到哪些信息呢?主要就是一下几大类:类构造器变量(包括私有的)方法(包括私有的)访问器(Sitter/Getter)注解泛型数组动态代理动态类加载与重载下面通过操作Test类的代码

2016-06-18 21:02:55 780

原创 线程安全的集合类、CopyOnWrite机制介绍

关于集合框架的其他部分可以查看另一篇文章:JAVA集合框架学习总结,这里仅就集合框架中的线程问题做讨论,有错误之处欢迎指正。LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的; HashMap是非线程安全的,HashTable是线程安全的;Java.util.concurrent.ConcurrentHashMap ConcurrentHashMa

2016-06-18 14:22:22 1713

原创 设计模式:单例模式及其线程安全

单例模式确实已经接触了好久了,现在就着线程安全对这个设计模式做一个总结(顺序:单例模式基础->单例模式线程安全->线程安全的基础上改进效率->防止Java反射机制再创建对象),有错误之处请指教。单例模式的本质就是要控制类的实例的个数,就是要保证每个类只能有一个实例对象。 单例模式实现的方式就是:    - 构造函数私有化;    - 创建一个本类对象;    - 提供方法返回这个对象;单例模

2016-06-18 10:38:20 892

原创 Java关键字volatile修饰变量

volatile关键字的作用是告诉编译器,凡是被该关键字申明的变量都是易变的、不稳定的,所以不要试图对该变量使用缓存等优化机制,而应当每次都从他的内存地址中去读取值,但volatile并不是每次更改完就要立刻将他写回内存,volatile只提供了内存的可见性,并不提供原子性(与锁机制的区别:锁机制即提供了内存的可见性又提供了原子性)。   使用volatile标记的变量在读取或写入时不需要使用锁,

2016-06-18 08:55:22 2112

原创 Java多线程synchronized、ReentrantLock、ReentrantReadWriteLock 和StampedLock 的对比

synchronized是在JVM层面上实现的,可以通过一些监控工具控制synchronized的锁定,当代码出现异常时,JVM会自动释放锁定。当只有少量竞争者的时候,synchronized是一个很好的通用的锁实现。synchronized的锁是针对一个对象的。ReentrantLock、ReentrantReadWriteLock 和StampedLock都是代码层面的锁定,要保证锁一定会被释

2016-06-17 22:24:39 1919

原创 Java多线程线程安全实现方式

线程安全就是要保证数据的高度一致性和准确性,但不是一定要加锁才是线程安全性,只要代码里没有变量互串,线程之间互不影响,就是线程安全的。 要了解线程安全,可以先看一下线程不安全是怎样的一种现象。public class TreadNoSafeDemo { public static void main(String[] args) { new ThreadNoSafeTest(

2016-06-17 19:38:30 15047

原创 Java内存模型与多线程数据可见性和操作的有序性

CPU在计算的时候,并不总是从内存读取数据,而是按:寄存器->高速缓存->内存的顺序读取,一些使用频繁的数据会被放在寄存器和高速缓存中,当线程计算完后,这些缓存的数据在适当的时候被写回内存,当多个线程同时读取某个内存的数据时,会涉及到数据的可见性和操作的有序性问题。 Java是平台无关性语言,JLS(java语言规范)定义了一个统一的内存管理模型JMM(Java Memory Model),JMM

2016-06-17 18:34:23 1384

原创 Java多线程-当前线程副本:ThreadLocal

ThreadLocal是一个关于创建线程局部变量的类。 一般情况我们创建的变量是可以被任何一个线程访问并修改的,而使用ThreadLocal创建的变量只能被当前线程访问,其他线程无法访问和修改。 ThreadLocal<T> 接口的方法也很简单,只有四个方法: public class ThreadLocalDemo { //通过匿名内部类创建一个ThreadLocal对象。

2016-06-16 20:27:53 1675

原创 Java守护线程(后台线程)

Java守护线程(后台线程) java的垃圾回收线程就是一个守护线程。 当线程结束的时候守护现场也就自然会结束了,守护线程和普通线程的写法是一样的,只是在start()之前要先使用public final void setDaemon(boolean vale)设置为true。可以使用thread.isDaemon()判断特定的线程thread是否为守护线程:public class Threa

2016-06-16 16:23:48 2509

原创 线程的生命周期与常用方法

线程的生命周期一共五个状态:新建、就绪、运行、堵塞、死亡 (1)新建 new Thread Thread thread=new Thread(); 当创建一个Thread对象时,这个线程就进入了新建状态,有了自己的内存空间,但还没有启动,此时线程还不是活的。 (2)就绪 runable 线程已经启动,正在等待CPU时间片。(通过线程的start()方法启动线程后进入就绪状态),此时具备运

2016-06-15 14:24:28 1243

原创 关于线程的中断机制

Java中没有提供任何的机制来安全的终止线程,那我们应该怎么让线程停止或者中断呢? java停止或中断线程有下列方式: 1.调用Thread.stop() 2.利用Thread.interrupt()方法和机制调用Thread.stop() 使用这种方法强迫停止一个线程,并抛出一个新创建的ThreadDeath对象作为异常,停止一个还未启动的线程也是允许的,如果稍后启动该线程,他会立即终止。

2016-06-15 13:08:14 3479

原创 多线程执行时为什么调用的是start()方法而不是run()方法

Thead类中start()方法和run()方法的区别 start()用来启动一个线程,当调用start()方法时,系统才会开启一个线程,通过Thead类中start()方法来启动的线程处于就绪状态(可运行状态),此时并没有运行,一旦得到CPU时间片,就自动开始执行run()方法。此时不需要等待run()方法执行完也可以继续执行下面的代码,所以也由此看出run()方法并没有实现多线程。

2016-06-15 11:34:25 11205 3

原创 多线程的实现基础知识总结

多线程是在同一程序内部并行执行,因此会对相同的内存空间进行并发读写操作。Java中实先多线程的方式主要有如下几种:1.继承Tread类2.实现Runable接口3.实现Callable接口(应用程序可以使用Executor框架来创建线程池)。其中最常见的是继承Tread类和实现Runable接口这两种方式。这两种方式的话一般选择实现Runable接口,因为实现Runable接口比继承Trea

2016-06-14 22:05:00 834

原创 Java集合框架使用场景

不需要唯一用List 需要快速插入、删除元素:用LinkedList 需要快速访问元素:     |–单线程环境:用ArrayList     |–多线程环境:用Vector 需要先进后出的特殊结构用Stack需要唯一用Set 需要指定的顺序:TreeSet 不需要指定的顺序:HashSet 需要得到与存储一致的顺序:LinkedHashSet存储的是键值对用Map 涉及堆栈、队

2016-06-14 10:02:26 3822 1

原创 Java中Fail-Fast机制、ConcurrentModificationException异常

ConcurrentModificationException 异常:当方法检测到对象的并发修改,但不允许修改时就会抛出这个异常。Fail-Fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合操作时就可能会产生Fail-Fast 事件。 比如:有两个线程A和B,线程A通过iterator 遍历集合T中的元素时,某个时候线程B修改了集合T的结构,此时就会产生F

2016-06-07 20:58:27 1190

原创 JAVA集合框架学习总结

集合框架 HashMap HashSet Hashtable LinkedHashMap LinkedHashSet ArrayList LinkedList

2016-06-07 10:12:05 4328

成绩管理系统

① 学生基本信息的录入、增加、删除、修改; ② 成绩统计功能,如:平均分,排名次,及格率,各分数段人数百分比等; ③ 按各种条件查询学生信息; ④ 其它功能,如补考名单,各学年成绩处理,成绩直方图,评语等。

2017-01-22

ASP.NET(C#)实现的学生-教师基本信息查询系统

学生-教师基本信息查询系统的主要功能是——基础用户可以查询学生教师的部分基本信息,并及时提交变更请求。而登陆管理员界面之后,可以修改管理员密码,新增管理员,对学院、部门、专业、学生、教师进行添加、修改、删除操作,同时为了系统的安全还可以备份还原数据库信息、查看登陆日志等信息。

2016-07-09

java-jsp留言板

Jsp+Servlet+JavaBean学习阶段的一个案例总结 名称:留言板(MessageBoard) 开发技术:Jsp+Servlet+JavaBean 数据库:Mysql 开发工具:IntelliJ IDEA 2016.1.3 服务器:Tomcat 8.0.36 功能说明 普通用户:增加删除修改留言信息 管理员:增加删除修改留言信息、管理用户、设置用户发帖留言权限 数据库结构 tb_user表 字段 类型 名称 说明 id int id name nvarchar 姓名 password nvarchar 密码 limit int 权限 0:允许发言 1:禁止发言 tag int 标签 0:用户 1:管理员 tb_message表 字段 类型 名称 说明 id int id author nvarchar 作者 context nvarchar 留言内容 msgdate datetime 留言时间 结构 总体结构 这里写图片描述 这里写图片描述 src结构 这里写图片描述 web结构 这里写图片描述

2016-09-08

Java集合框架的一个扑克牌小程序

* Game 类 * 功能:整个游戏:开始游戏 -> 初始牌 -> 洗牌 -> 发牌 -> 排序 -> 比较大小 -> 游戏结果 * 游戏说明: * 1.创建一副扑克牌,不考虑大小王 * 2.创建两名玩家,玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合 * 3.洗牌,将之前创建的扑克牌顺序打乱 * 4.发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张 * 5.开始游戏,比大小,大小相同比花色 * * PockerCard 类 * 功能:扑克牌的核心类 包括创建角色、创建牌、显示牌、洗牌、比较牌、排序牌等 * 属性:List cards 整幅扑克牌的集合 、 People[] peoples 角色 * 方法: public PockerCard() //无参构造函数: 创建牌的集合、创建两个角色对象 * public void initializeCard() //创建整幅扑克牌 * public void showCard() //显示单支牌的花色和点数 * public void refreshCard() //洗牌 从第一支牌开始从所有牌中随机取一只与之交换 * public void addPeopleInfo() //添加玩家的基本信息 * public void dealCard() //发牌 从开始分别给A B发牌 每人两支 * public void showPeopleCard() //显示两个角色自己获得的牌 * public void sortCard() //将每个角色自己的牌按从小到大排序 * public void comparePeopleCard() //比较角色的牌 * * SingleCard类 实现Comparable接口 * 功能:产生单支牌 * 属性:ID、color、keyID数组、keyColor数组 * 方法:public SingleCard(){} //无参构造函数 * public SingleCard(String ID,String color) //有参构造函数 * @Override public int compareTo(SingleCard o) //比较当前牌与SingleCard o的牌的大小 * * People类 * 功能:产生一个角色 * 属性:ID、Name、和、存储牌的List集合。 * 方法: public People() //初始化存储牌的List集合; *

2016-07-09

安卓简单QQ

1. 概述 1.1课题题目:SimpleQQ(简易自动聊天软件) 1.2系统的主要目标: 通过Android开发原生的安卓手持设备软件熟悉本学期的学习任务,强化学习技能,把理论用到实际中。 1.3 系统的开发环境及运行环境: 操作系统:Windows 10 数据库系统:SQLite 项目版本控制:GitHub 、Git 2.9.2 开发工具:IntelliJ IDEA 2016.1.4 开发语言:Java (JDK 1.8.0_45) 运行环境:Android 4.4及以上 2. 系统需求分析 SimpleQQ软件希望打造一个多服务及即使聊天的安卓应用程序,此软件核心功能为自动聊天,附带功能为拍照、保存照片到本地、播放视频、发送短信、获取定位、注册、登陆、发布说说、浏览空间。 SimpleQQ软件功能模块表 功能模块 功能 拍照模块 调用系统相机进行拍照、并将拍照结果保存到指定目录下 我的相册模块 查看指定目录下的照片 我的视频模块 播放指定目录下的视频文件 分享软件模块 分享软件给输入的号码发送短信 地理位置模块 通过使用高德地图API获取当前定位 好友列表模块 查询数据库中的所有好友真实姓名信息,并可以根据右侧字母查找 立即注册模块 注册软件用户:登陆账号、密码、真实姓名 发说说模块 当前登录用户发布说说 看动态模块 时间轴方式查看所有好友说说 聊天模块 当前登录用户可选择任意好友进行聊天,好友自动回复

2017-01-22

通讯录管理系统

1、系统功能说明: 该程序能在配置较低的软硬件环境中运行。 ① 能方便地查看联系人的信息; int search(struct book txl[],int count,char name[]); //查询联系人函数 void allbook(struct book txl[], int count); //显示所有联系人函数 ② 能更新联系人的信息:新增、删除、编辑; int newbook(struct book txl[],int count); //新增联系人函数 int del(struct book txl[],int count,char name[]); //删除联系人函数 int change(struct book txl[],int count,char name[]); //修改联系人函数 ③ 能备份通信录; void writefile(struct book txl[], int count); //写文件函数 ④ 其他功能:数据的一致性,可靠性,易操作性等。 数据一致性: count=count+newbook(txl,count);writefile(txl, count); //添加联系人后同步数据 count=del(txl,count,name);writefile(txl, count); //删除联系人后同步数据 change(txl,count,name);writefile(txl, count); //修改联系人后同步数据 可靠性:用count做全局变量当联系人增加时随时记录,每次增加时会查询是否已存在联系人,不存在则无法修改,已存在则提示是够继续添加,每次增加后数据自动写入文件。 易操作性: 在显示全部联系人后加了是否需要修改和删除,可以直接进入功能,无需再返回程序选择,定义了查询联系人函数,在修改,删除,增加时会自动检查有没有该联系人的存在,定义了排序联系人函数,在查看时可以直接查看已排好序的联系人。

2017-01-22

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除