随笔分类 -  java并发编程

摘要:1.Java内存模型的抽象结构 Java中,所有的实例、静态域和数组元素都存储在堆内存中,堆内存是线程共享的。局部变量,形参,异常处理参数不会在线程之间共享,所以不存在内存可见性问题,也就不受内存模型的影响。 Java之间的通信由JMM控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。 阅读全文
posted @ 2017-09-10 20:51 dquery 阅读(260) 评论(0) 推荐(0)
摘要:有时候需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化。此时,常用的可能就是延迟初始化,例如:懒汉式单例模式,但是要正确的实现线程安全的延迟初始化需要一些技巧,下面是非线程安全的示例代码: 在示例代码中,假如A线程执行步骤1的同时,B线程执行步骤2,线程A可能会看到insta 阅读全文
posted @ 2017-06-25 16:48 dquery 阅读(1895) 评论(0) 推荐(0)
摘要:JDK7提供了7个阻塞队列,如下: ArrayBlockingQueue : 一个数组结构组成的有界阻塞队列。 LinkedBlockingQueue : 一个由链表结构组成的有界阻塞队列 。 PriorityBlockingQueue : 一个支持优先级排序的无界阻塞队列 。 DelayQueue 阅读全文
posted @ 2017-06-24 22:53 dquery 阅读(307) 评论(0) 推荐(0)
摘要:排他锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻允许多个读线程访问,但是在写线程访问时,所有的读线程和其他的写线程均被阻塞。读写锁内部维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大的提升。 读写锁除了保证写操作对读操作的可见性和提高并发的性能之外, 阅读全文
posted @ 2017-06-22 16:29 dquery 阅读(267) 评论(0) 推荐(0)
摘要:对于服务端而言,经常面对的是客户端传入的短小任务,需要服务端快速处理并返回结果。如果服务端每次接受一个客户端请求都创建一个线程然后处理请求返回数据,这在请求客户端数量少的阶段看起来是一个不错的选择,但是面对成千上万的请求在某一时段同时到达服务器时,如果还是采用这种方式,那么将会创建数以万计的线程,暂 阅读全文
posted @ 2017-06-19 23:21 dquery 阅读(484) 评论(0) 推荐(0)
摘要:我们都知道,Java中的锁可以让临界区互斥执行。锁是Java并发编程中最重要的同步机制,锁除了可以让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。下面是锁的释放-获取的代码: 假设线程A执行writer()方法,随后线程B执行reader()方法。根据happens-befor 阅读全文
posted @ 2017-06-13 17:13 dquery 阅读(439) 评论(0) 推荐(1)
摘要:在java多线程中,可以使用synchronized实现线程之间的同步互斥,但在jdk1.5中增加了ReentrantLock类也能达到同样的效果,而且在使用上更加灵活,扩展功能上更加强大。 创建MyService.java类,代码如下: 调用ReentrantLock对象的lock()方法获取锁, 阅读全文
posted @ 2017-02-19 21:54 dquery 阅读(754) 评论(0) 推荐(1)
摘要:本文将介绍jdk提供的api中停止线程的用法。 停止一个线程意味着在一个线程执行完任务之前放弃当前的操作,停止一个线程可以使用Thread.stop()方法,但是做好不要使用它,它是后继jdk版本中废弃的或者将不能使用的方法,大多数停止一个线程的操作使用Thread.interrupt()方法。 1 阅读全文
posted @ 2017-02-14 21:38 dquery 阅读(256) 评论(0) 推荐(0)
摘要:1.创建Queue.java 运行结果如下: 执行第一个put的时候由于队列容量已经满了,所以线程阻塞。另一个线程take之后,阻塞的线程继续执行put成功。 阅读全文
posted @ 2017-02-13 22:03 dquery 阅读(5282) 评论(0) 推荐(0)
摘要:首先创建一个MyThread类,继承Thread,有一个成员变量flag,重写run方法: 然后,创建Run类,如下: 运行结果如下: 可以看到,程序的运行结果出现了死循环,另一个线程修改了flag的值为false之后,并没有跳出循环,这是因为在执行代码thread.start()启动这个线程时,变 阅读全文
posted @ 2017-02-12 12:33 dquery 阅读(275) 评论(0) 推荐(0)
摘要:同步机制是Java并发编程中最重要的机制之一,锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能防止多个线程同时访问共享资源(但是也有例外,比如读写锁)。Java中可以使用synchronized关键字实现锁的功能,用synchronized修饰的方法或者代码块,在锁和获取和释放时隐式的,这 阅读全文
posted @ 2016-12-13 12:53 dquery 阅读(215) 评论(0) 推荐(0)