- 博客(22)
- 资源 (2)
- 收藏
- 关注
原创 多线程下的单例模式
单例模式就不在这里详细介绍了,这里要了解的是如何使单例模式遇到多线程是安全的。 单例模式分为饿汉模式和懒汉模式。 饿汉模式就类在加载的时候就创建实例,当使用类的时候已经将对象创建好了 public class SingletonMode1 { private static SingletonMode1 singletonMode1 = new ...
2018-06-07 11:16:02
397
原创 读写锁 ReentrantReadWriteLock(共享锁+排他锁)
重入锁ReentrantLock具有完全互斥排他的效果,即在同一时间,只有获取锁的线程才能够执行相应的操作,这样保证了线程安全,但是某些情况下也造成了效率低下的问题,比如被锁的代码块中只有读操作,不会修改任何变量,这样的话就会效率较低,那么我们可以使用JDK提供的另一种读写锁ReentrantReadWriteLock。 ReentrantReadWriteLock包...
2018-06-05 15:02:46
1012
原创 重入锁ReentrantLock常用方法(三)
1. isHeldByCurrentThread() 查询当前线程是否保持锁定。 isLocked() 查询是否存在任意线程保持此锁定。public class ReentrantLockMethodTest7 { private ReentrantLock lock = new ReentrantLock(); public void testMethod(...
2018-06-05 11:04:19
2590
原创 Java基础之并发实用工具
并发实用工具位于java.util.concurrent包以及它的两个子包(java.util.concurrent.atomic和java.util.concurrent.locks)。 java.util.concurrent包定义的关键特征有: 同步器 执行器 并发集合 Fork/Join框架 1. 同步器 同步器提供了同步多线程之间交互...
2018-06-04 22:53:28
200
原创 重入锁ReentrantLock常用方法(二)
重入锁ReentrantLock常用方法1. boolean hasQueuedThread(Thread thread) Queries whether the given thread is waiting to acquire this lock 查询当前线程是否在等待获取此锁 boolean hasQueuedThreads() Queries whether an...
2018-06-04 18:06:58
272
原创 重入锁ReentrantLock常用方法(一)
重入锁ReentrantLock常用方法 1. int getHoldCount() Queries the number of holds on this lock by the current thread. 查询当前线程保持此锁定的个数,即调用lock()方法的次数。public class ReentrantLoc...
2018-06-04 16:03:35
1596
原创 重入锁ReentrantLock之公平锁与非公平锁
公平锁:线程获取锁的顺序是按照线程加锁的顺序来分配的,即先进先出。 非公平锁:线程获取锁的顺序是随机的,听天由命。 怎样构建公平锁与非公平锁? 类ReentrantLock有两个构造方法,其中一个是传递一个boolean类型的参数,标识创建一个具有给定公平策略的ReentrantLock,即:1. 创建公平锁或非公平锁public clas...
2018-06-04 14:54:30
283
原创 重入锁ReentrantLock+Condition 实现生产者/消费者模式
使用ReentrantLock+Condition同样可以实现经典模式生产者/消费者模式 开始测试 1. 两个线程一对一交替执行线程交替执行的方法public class TestPC { private volatile boolean printA = true; private Lock lock = new ReentrantL...
2018-06-04 14:07:47
807
原创 重入锁ReentrantLock+Condition 实现等待/通知
在Java多线程编程中,可以使用Synchronized来实现同步,可以synchronized类,方法或代码块,另外还可以使用ReentrantLock来实现同样的功能,而且功能更加强大。 1. 使用ReentrantLock实现同步public class ReentrantLockTest { private Lock lock = new Reent...
2018-06-04 12:33:04
1156
原创 JVM-内存区域
发现自己老了,好多东西开始慢慢忘却,,趁现在还记得一点,感觉记下来,如果得到各位读者的补充或指正,不胜感激。 先画个简易图,看起来清晰明了 其中深色的区域是线程共享数据区,浅色的是线程隔离数据区。 1. Java堆 Java堆是用来存放Java对象实例的内存区域,所有的对象实例以及数组都在堆这分配,而且它也是JVM管理...
2018-06-01 15:52:12
277
原创 多线程通信(四)join()方法的使用
开发中常常会遇见这样的问题,主线程在运行的时候,需要一些子线程去进行相应的运算,如果主线程需要子线程提供一个处理后的数据,那么主线程就必须要等子线程运行完后才能继续执行。先看下面的这种情况影视作品的一个拍摄场景中,这次不是主角(主线程)的独角戏,他需要一个配角(子线程)来搭戏,但是配角还没来,主角只能等配角来了才能开始,要是配角没来,主角非要开始的话那这个场景的戏就乱了。publi...
2018-06-01 12:47:10
1231
3
原创 多线程通信(三)多线程通知/等待交叉进行
如何向A、B两个文件中写数据并且向A、B中写数据是交叉进行的,假定向A中写数据的是A线程,向B中写数据的是B线程,那么可以通过定义一个标识,用来控制A、B线程的交叉效果。定义输出类public class FileOutput { // 定义volatile类型的变量,让多个线程能从公共内存中直接获取值 private volatile boolean print...
2018-06-01 10:14:02
344
原创 多线程通信(二)生产者/消费者模式
生产者/消费者模式其原理是基于wait/notify实现的。 通过代码更能便于理解,废话不多说,上代码。 生成者和消费者一对一模式 生产者public class Producer { private String obj; public Producer(String obj){ super(); ...
2018-05-31 20:21:04
796
转载 视图、索引、存储过程优缺点
1.视图(1).什么是视图?视图(View)作为一种数据库对象,为用户提供了一个可以检索数据表中的数据方式。用户通过视图来浏览数据表中感兴趣的部分或全部数据,而数据的物理存储位置仍然在表中。视图是一个虚拟表,并不代表任何物理数据,只是用来查看数据的窗口而已。视图并不是以一组数据的形式存储在数据库中,数据库中只存储视图的定义,而不存储视图对应的数据,这些数据仍存储在导出视图的基本表中。当
2014-06-16 14:11:27
440
原创 MySQL存储过程的学习(一)
1.存储过程的创建CREATE PROCEDURE proc_demo()BEGINSELECT username FROM t_user;END
2014-06-13 16:56:44
438
原创 使用HttpSessionBindingListener统计在线人数
使用HttpSessionBindingListener统计在线人数统计在线
2014-06-13 10:24:43
987
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人