多线程
ApacheCrazyFan
巨人的肩膀
展开
-
Semaphore的使用之-公平与非公平信号量的测试
有些时候,获得许可的顺序与线程启动的顺序有关,这时信号量就要分为公平与非公平的。所谓的公平信号量是获得锁的顺序与线程启动顺序有关,但不代表100%地获得信号量,仅仅是在概率上能得到保证。而非公平信号量就是无关的了。创建测试用的项目semaphoreFairTest,类MyService.java代码如下:package com.yc.semephore_2;import java.原创 2017-03-19 21:06:04 · 1902 阅读 · 0 评论 -
使用Executors工厂类创建线程池
接口Executor仅仅是一种规范,是一种声明,是一种定义,并没有实现任何的功能,所以大多数的情况下,需要使用接口的实现类来完成指定的功能,比如ThreadPoolExecutor类就是Executor的实现类,但ThreadPoolExecutor在使用上并不是那么方便,在实例化时需要传入很多歌参数,还要考虑线程的并发数等与线程池运行效率有关的参数,所以官方建议使用Executors工程类来创建原创 2017-03-25 23:17:35 · 1516 阅读 · 0 评论 -
Executor接口介绍
在开发服务器端软件项目时,软件经常需要处理执行时间很短而数目却非常巨大的请求,如果为每一个请求创建一个新的线程,会导致性能上的瓶颈,因为线程对象的创建和销毁需要JVM频繁地进行处理,如果请求的执行时间很短,可能花在创建和销毁线程对象上的时间大于正真执行任务的时间,若这样,则系统性能大幅降低。在JDK5中提供了线程池的支持,主要的作用就是支持高并发的访问处理,并且可以将线程对象进行复用。核心原理原创 2017-03-25 20:05:44 · 588 阅读 · 0 评论 -
为什么程序员需要关心顺序一致性(Sequential Consistency)而不是Cache一致性(Cache Coherence?)
本文所讨论的计算机模型是Shared Memory Multiprocessor,即我们现在常见的共享内存的多核CPU。本文适合的对象是想用C++或者Java进行多线程编程的程序员。本文主要包括对Sequential Consistency和Cache Coherence的概念性介绍并给出了一些相关例子,目的是帮助程序员明白为什么需要在并行编程时关注Sequential Consistency。原创 2017-03-14 22:15:59 · 810 阅读 · 0 评论 -
剖析为什么在多核多线程程序中要慎用volatile关键字?
主要内容有:1. C/C++中的volatile关键字2. Visual Studio对C/C++中volatile关键字的扩展3. Java/.NET中的volatile关键字4. Memory Model(内存模型)5. Volatile使用建议1. C/C++中的volatile关键字1.1 传统用途C/C++作为系统级语言,它们与硬件的联系是很紧转载 2017-03-14 22:21:40 · 1123 阅读 · 0 评论 -
并行编程中的“锁”难题
在并行程序中,锁的使用会主要会引发两类难题:一类是诸如死锁、活锁等引起的多线程Bug;另一类是由锁竞争引起的性能瓶颈。本文将介绍并行编程中因为锁引发的这两类难题及其解决方案。1. 用锁来防止数据竞跑在进行并行编程时,我们常常需要使用锁来保护共享变量,以防止多个线程同时对该变量进行更新时产生数据竞跑(Data Race)。所谓数据竞跑,是指当两个(或多个)线程同时对某个共享变量进行操原创 2017-03-14 22:19:24 · 629 阅读 · 0 评论 -
Exchanger的使用
类Exchanger的功能可以使2个线程之间传输数据,它比生产者/消费者模式使用的wait/notify要更加方便。所以本次将介绍此类在2个线程之间传递任意数据类型的数据,Exchanger类的使用与结构相当简单,主要的学习点就是exchange()方法。方法exchange()阻塞的特性类Exchanger中的exchange()方法具有阻塞的特色,也就是次方法被调用后等待其他线程来取数原创 2017-03-21 12:31:06 · 653 阅读 · 0 评论 -
Semaphore的使用之-多生产者-多消费者模式
本实验的目的不光是要实现生产者与消费者模式,还要限制生产者与消费者的数量,这样代码的复杂性就提高一些,但好在使用Semaphore类实现这个功能还是比较简单的。创建实验用的项目repastTest,类RepastService.java代码如下:原创 2017-03-21 00:05:30 · 1278 阅读 · 0 评论 -
Semaphore创建字符串池
类Semaphore可以有效地对并发执行任务的线程数量进行限制,这样功能可以应用在pool池技术中,可以设置同时访问pool池中数据的线程数量。本实验的功能是同时又若干个线程可以访问池中的数据,但同时只有一个线程可以获得数据,使用完毕后在放回池中。创建实验用的项目Semaphore_Pool_list,类ListPool.java代码如下:package com.yc.semephor原创 2017-03-20 00:04:48 · 434 阅读 · 0 评论 -
Semaphore的使用之-(多进路-多处理-多出路)和(多进路-单处理-多出路)
多进路-多处理-多出路本实现的目标是允许多个线程同时处理任务,更具体来讲,也就是每个线程都在处理自己的任务。创建实验用的项目Semaphore_MoreToOne_1,类Service.java代码如下:package com.yc.semephore_4_1;import java.util.concurrent.Semaphore;public class Service原创 2017-03-19 22:57:00 · 493 阅读 · 0 评论 -
Semaphore的使用之方法tryAcquire()的使用
无参方法tryAcquire()的作用是尝试的获得1个许可,如果获取不到则返回false,该方法通常与if语句结合使用,其具有无阻塞的特点。无阻塞的特点可以使线程不至于在同步处一直持续等待的状态,如果if语句判断不成立则线程会继续走slse语句,程序会继续向下运行。创建Java项目Semaphore_tryAcquire,MyService.java代码如下:package com.yc.原创 2017-03-19 22:20:07 · 20972 阅读 · 1 评论 -
类Semaphore的同步性
单词Semaphore的中文含义是信号、信号系统意思。此类的主要作用是限制线程并发的数量,如果不限制线程并发的数量。,则CPUD的资源很快就会被耗尽,每个线程执行的任务相当缓慢,因为CPU要把时间片分配给不同的线程对象,而且上下文切换也要耗时,最终造成系统运行效率大幅降低,所以限制并发线程的数量还是非常有必要的。在生活中也存在这种场景,比如一个生产键盘的生产商,发布了10个代理销售许可,所有最原创 2017-03-16 13:33:54 · 542 阅读 · 0 评论