- 博客(8)
- 资源 (18)
- 收藏
- 关注
原创 33、volatile
在实际项目使用并不多,但是容易出错。很多人感觉和synchronized差不多,实际上完全不一样。我们看一下两者的区别: volatile保证程序的可见性,这个和synchronize的区别就非常大,首先volatile他并不保证原子性。synchronized可以保证原子性, 什么叫原子性呢? 就是多个线程同时操作一个数据或则方法时,他们没有办法同时操作,只有一个操作完毕,另一个才能操作。 ...
2018-07-23 20:54:36 171
原创 31、为什么要使用多线程?
上几期讲了行程的五张状态,同步工具类,线程池等知识点?但是这些知识点在什么场景下使用呢? 使用多线程的场景: 场景一、定时向大量的用户发送邮件。所有的定时任务都是多线程的实现。 场景二、用户注册时候需要短信或则邮件验证。短信和邮件接口比较耗时,前端UI感觉被卡住,这时候 一个异步线程去发送邮件或则短信。用户体验会更好。 场景三、你要写一个电商网站,怎么实现双11抢购模型。...
2018-07-21 12:50:46 268
原创 30、CyclicBarrier的使用
在29课中我们说了 一个同步工具类CountDownLatch,他是一次性的,使用完毕后,它不能再次被使用。那么有没有可以重发使用的呢?有,这次我们就了解下可以重复使用的同步工具类CyclicBarrier。 CyclicBarrier 字面意思是循环栅栏。意思就是一道又一道永远走不完的栅栏。可以这么理解。就是一道道满足一定人数才能放行的栅栏。 CyclicBarrier的定义:是一个同步工具...
2018-07-19 21:15:24 170
原创 29、CountDownLatch原理以及使用
CountDownLatch的概念 CountDownLatch是一个同步工具类,用来协调多个线程之间的同步, 或者说起到线程之间的通信(而不是用作互斥的作用)。 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。 使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后, 计数器的值就会减一。 当计数器的值为0时,表示所有的线程都已经...
2018-07-17 22:04:00 270
转载 27、java的类加载原理二
上一篇文章我们说了,类加载生命周期包括 加载-->验证-->准备-->解析-->初始化-->使用-->卸载 七个阶段 我们也详细说明下了加载的过程,这期我们讲解下其他步骤: 验证 验证的目的是为了确保Class文件中的字节流包含的信息符合当前虚拟机的要求,而且不会危害虚拟机自身的安全。不同的虚拟机对类验证的实现可能会有所不同,但大致都会完成...
2018-07-14 21:02:33 202
原创 25、java反射面试题
1、java反射机制的作用 1)在运行时判断任意一个对象所属的类; 2)在运行时构造任意一个类的对象; 3)在运行时判断任意一个类所具有的成员变量和方法; 4)在运行时调用任意一个对象的方法;反射就是动态加载对象,并对对象进行剖析。在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法,这种动态获取信息以及动态调用对象方法的功能成为Java反...
2018-07-14 14:26:09 10875
原创 24、Java中如何实现一个定时任务
在实际开发中经常用到定时任务,如定时清理数据,备份数据,报表统计等。java中怎么实现定时任务呢?1、通过线程,定时睡眠方法执行定时任务 创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果; new Thread(new Runnable() { @Override public void run() { whil...
2018-07-14 10:20:04 1303
原创 26、java的类加载原理
1、编译阶段 Java编译器把 .java编译成 .class文件2、类加载过程 类加载的整个生命周期为从类被加载到虚拟机中开始,到卸载出内存为止,它的整个生命周期包括:加载-->验证-->准备-->解析-->初始化-->使用-->卸载 七个阶段 1)加载,第一个阶段,在加载阶段,虚拟机需要完成以下三件事情通过一个类的全限定名来获取其定义的二进制字节流...
2018-07-14 08:43:48 209
分表代码,每天一张新表,用table_yyyy_MM_dd命名
2018-01-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人