自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 第七章:拾遗增补

线程对象在不同的运行时期有不同的状态,状态信息就存在于State枚举类中。Thread.State线程各个状态的验证:Thread.currentThread().getState();线程组。线程组的作用是可以批量管理线程或线程组对象,有效地对线程或者线程组对象进行组织。ThreadGroup group = new ThreadGroup();Thread threadA...

2018-11-10 21:32:50 157

原创 第六章:单例模式和多线程

单例模式的“饿汉模式” 因为getInstance()方式没有用同步锁,是线程不安全的。public static MyObject getInstance() {try {// 延迟加载if(myObject != null) {// 已经有了}else {//模拟在创建对象之前做一些准备性的工作Thread.sleep(3000);myObject = new MyObj...

2018-11-10 21:32:13 170

原创 第五章:定时器 Timer

创建一个Timer 就是启动了一个线程,这个线程显然不是守护线程,所以一直运行。停不下来timer.schedule(task, runDate); 在什么时候,做什么事儿。在实例化Timer的时候,把它设置为守护线程。 Timer timer = new Timer(true);计划时间早于当前时间—就立即执行。一个Timer中可以有多个TimeTask, 也许会出现延时,因为前...

2018-11-10 21:31:33 227

原创 第四章:Lock的使用

前面讲了使用synchronized来实现线程的同步, 这次使用Lock对象来实现。一个类学学API感觉没啥意思记住一个类ReentranLock类, Lock = new ReentranLock(); lock.lock; …; lock.unlock; 在这之间的代码就能实现同步,跟synchronized的同步代码块一模一样。synchronized + wait()/n...

2018-11-10 21:30:44 246

原创 第三章:线程间通信

一句话总结wait和notify: wait使线程停止运行, 而notify使停止的线程继续运行。wait()执行后,线程进入等待线程队列,释放锁。notify()执行后,并不立即释放锁,后面语句要执行完才释放。关键字synchronized可以将任何一个Object作为同步对象看待,JAVA为每一个Object都实现了wait()和notify()方法。 wait()和notify...

2018-11-10 21:30:02 114

原创 第二章:多线程---对象和变量的并发访问

线程不安全问题存在于“实例变量”中, 如果是方法内部的私有变量,则不存在线程不安全的问题。因为方法内部的变量是私有的,它是随着线程的创建而创建的。关键字synchronized取得的锁都是对象锁,而不是把一段代码或者是方法当做锁。所以哪个线程先执行带synchronized关键字的方法,哪个线程就持有该对象的Lock,其他线程只能等待状态。对于非同步的方法,其他线程仍然可以访问。这...

2018-11-09 00:54:42 133

原创 第一章:多线程---基本API

thread.start() 和 thread.run() 的区别thread.start()方法通知“线程规划器”。就是让系统安排一个时间来调用thread中的run()直接用thread.run() 就不是异步的了,而是同步的,是直接由main线程调用的。线程对象不交个“线程规划器”,必须等run()执行完了,后面的程序才能执行。//线程共享数据MyThreadDataSel...

2018-11-09 00:53:39 137

原创 动态代理

2018-10-18 12:05:51 92

原创 自定义最简单Mybatis

要干什么? 什么时候干?流程步骤分解3.1 解析封装主要是要搞清楚Configuration中Map<String, Mapper> mapper的结构:在SqlMapConfig.xml的标签里面可以有多个, 一个UserMapper.xml可以有多个 标签。Map<String, Mapper>:String=key=namespace+id;M...

2018-10-10 23:48:42 198

原创 Web_demo_01(一)

1,一个B2C网站最开始的工作(除了浏览基本信息之外)就是注册和登录1.1 注册调用MailUtils给注册用户发一封激活邮件(有激活码. ) —> UserServlet/active方法去数据库查看激活码是否正确----> 跳转到longin.html 。跟验证码的思路一样,只是一个存在session中,一个存在数据库中。都是服务端生成一个数字,一份保存,一份发客户端,客户...

2018-09-27 21:37:15 545

原创 JVM(五) 常见的垃圾回收器

一、常见的垃圾回收器1, Serial 单线程,新生代,复制2, ParNew 多线程(减少了垃圾回收的时间 复制)-XX:MaxGCPauserMillis 设置最大垃圾收集停顿时间-XX:ParallelGCThreads:设置用于垃圾回收的线程数 GC线程数3, Parallel Scavenge (复制)跟2差不多,但关注点不一样。它关注的是吞吐量吞吐量= 运行用户代码时间...

2018-09-25 17:50:17 197

原创 JVM(四) 垃圾回收的算法

一、哪些对象需要被回收(对象已死?先判断)1.1 引用计数器(Java垃圾回收器从来没用过)2.2 可达性分析算法如果能被 GC Root找到的就是可达的。那哪些能被看成GC Root?a, 虚拟机栈中本地变量表引用的对象b, 方法区中 类静态变量引用的对象 & 常量引用的对象c, 本法方法栈中JNI引用的对象其实 GC Root 不可达的 像比如图中D对象,还是会再挽救一...

2018-09-25 17:15:35 101

原创 JVM(三) 堆内存的划分

一、学习JVM的目的一般是出现内存异常的时候快速定位问题和性能优化,那么内存是如何分配的就必须的作为基础知识。在上一篇《运行时数据区》中描述的了解到其实线程独占的三部分gc基本不动,在线程共享的两部分方法区gc也是基本动不了。那gc基本唯一会经常操作的就是堆内存。堆内存的大致划分:JDK 1.8和以前JDK 1.8以后 不在用永久带,而是Meta Space已经不在堆内存中。1.1 新生...

2018-09-25 16:47:31 4068 2

原创 JVM(二) 运行时数据区

一、运行时数据区的大致划分运行时数据区按照线程共享和独享来划分1.1 线程共享的(所有线程都共有的):方法区,Java堆1.2 线程独占区(JVM会给每一个线程划分一块,如图):程序计数器,虚拟机栈,本地方法栈。1.1 线程共享区1.1.1 堆:存放对象实例(垃圾回收器管理的最主要的区域)1.1.2 方法区...

2018-09-25 15:17:25 167

原创 JVM (一) 初步认识

JVM (一) 初步认识一、基础知识1. Java吹的最精确的牛逼Write Once,Run Anywhere。全靠不同OS上的不同的JVM实现,JVM对应处理的是 .class 文件即jar包。2. JDK,JRE,JVM结构关系3.Hello.java程序的流程二、初次体验 [软件版本idea 3.5 JDK 1.8]1. 写一个Demo程序,体验dump内存快照和用就co...

2018-09-25 11:52:41 251

空空如也

空空如也

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

TA关注的人

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