多线程基础
头发还长的程序员
这个作者很懒,什么都没留下…
展开
-
(十三)Thread-Specific Storage(ThreadLocal)模式
一、定义Thread-Specific Storage就是“线程独有的存储库”,该模式会对每个线程提供独有的内存空间。java.lang.ThreadLocal类提供了该模式的实现,ThreadLocal的实例是一种集合(collection)架构,该实例管理了很多对象,可以想象成一个保管有大量保险箱的房间。java.lang.ThreadLocal类的方法:public voi...原创 2020-03-11 10:26:19 · 197 阅读 · 0 评论 -
(十二)Two-phase Termination模式
一、定义我们将线程的正常处理状态称为“作业中”,当希望结束这个线程时,则送出“终止请求”。接着,这个线程并不会立刻结束,而是进入“终止处理中”状态,此时线程还是运行着的,可能处理一些释放资源等操作。直到终止处理完毕,才会真正结束。Two-phase Termination主要考虑以下问题:安全地结束(安全性); 一定会进行终止处理(生命性); 收到“终止请求”后,要尽快进行终止处理...原创 2020-03-10 10:11:31 · 264 阅读 · 0 评论 -
(十一)Future模式
一、定义Future模式用来获取线程的执行结果。在Thread-Per-Message模式中,如果调用一个线程异步执行任务,没有办法获取到返回值,就像:host.request(10,'A');而Future模式发出请求后,马上就要获取返回值,就像:Data data = host.request(10,'A');但是上述的返回值并不是程序的执行结果,因为线程是异步的,主线程调...原创 2020-03-09 17:46:57 · 82 阅读 · 0 评论 -
(十)Work Thread模式
一、定义Work Thread模式和Thread-Per-Message模式类似,Thread-Per-Message每次都创建一个新的线程处理请求,而Work Thread模式预先会创建一个线程池(Thread Pool),每次从线程池中取出线程处理请求。二、模式案例Request请求类:public class Request { private...原创 2020-03-09 17:14:12 · 625 阅读 · 0 评论 -
(九)Thread-Per-Message模式
一、定义指每个message一个线程,message可以理解成“消息”、“命令”或者“请求”。每一个message都会分配一个线程,由这个线程执行工作,使用Thread-Per-Message Pattern时,“委托消息的一端”与“执行消息的一端”会是不同的线程。二、模式案例该案例中,由Host分发请求,每一个请求分发一个新的线程进行处理。public class ...原创 2020-03-09 16:45:28 · 120 阅读 · 0 评论 -
(八)Read-Write Lock模式
一、定义Read-Write Lock Pattern将读取与写入分开处理,在读取数据之前必须获取用来读取的锁,而写入的时候必须获取用来写入的锁。因为读取时实例的状态不会改变,所以多个线程可以同时读取;但是,写入会改变实例的状态,所以当有一个线程写入的时候,其它线程即不能读取也不能写入。二、模式案例//自定义读写锁public final class R...原创 2020-03-09 16:30:41 · 304 阅读 · 0 评论 -
(七)Producer-Consumer模式
一、定义Producer-Consumer Pattern就是生产者-消费者模式。生产者和消费者为不同的处理线程,生产者必须将数据安全地交给消费者,消费者进行消费时,如果生产者还没有建立数据,则消费者需要等待。一般来说,可能存在多个生产者和消费者,不过也有可能生产者和消费者都只有一个,当双方都只有一个时,我们也称之为Pipe Pattern。二、模式案例该案例中,定...原创 2020-03-09 11:55:42 · 619 阅读 · 0 评论 -
(六)Balking模式
一、定义Balking是"退缩不前"的意思。Balking Pattern和Guarded Suspension Pattern一样需要警戒条件。在Balking Pattern中,当警戒条件不成立时,会马上中断,而Guarded Suspension Pattern则是等待到可以执行时再去执行。二、模式案例该案例会保存数据的属性,之前所保存的属性都会被覆盖。如果当前数据的属性与...原创 2020-03-09 10:51:58 · 179 阅读 · 0 评论 -
(五)Guarded Suspension模式
一、定义guarded是"被保护着的"、"被防卫着的"意思,suspension则是"暂停"的意思。当现在并不适合马上执行某个操作时,就要求想要执行该操作的线程等待,这就是Guarded Suspension Pattern,会要求线程等候,以保障实例的安全性,其它类似的称呼还有guarded wait、spin lock等。二、模式案例下面的案例是一种简单的消息处理模式,客户栈...原创 2020-03-09 10:18:05 · 192 阅读 · 0 评论 -
(四)Immutable模式
一、定义Immutable是"永恒的","不会改变"的意思。在Immutable Pattern中,有着能够保证实例状态绝不会改变的类(immutable类)。因为访问这个实例时,可以省去使用共享互斥机制所会浪费的时间,提高系统性能。java.lang.String就是一个Immutable的类。二、模式案例案例:Person类,具有姓名、地址等字段。字段都是私有的,只能通过...原创 2020-03-09 09:37:35 · 209 阅读 · 0 评论 -
(三)Single Threaded Execution模式
一、定义一个线程执行。有时也称为Critical Section(临界区)。二、模式案例案例:假设有三个人,频繁地通过一扇门,规定每次只能通过一个人,当通过一个人时,程序会将通过的总人次加1,同时记录该次通过人的姓名和出生地。门的定义:public class Gate { private int counter = 0; private St...原创 2020-03-08 18:05:27 · 99 阅读 · 0 评论 -
(二)Java内存模型
一、主存储器与工作存储器Java内存模型(memory model)分为主存储器(main memory)和工作存储器(working memory)两种。主存储器:类的实例所存在的区域,被所有的线程所共享。工作存储器:每个线程各自独立所拥有的的作业区,在工作存储器中,存有主存储器中的部分拷贝,称之为工作拷贝(working copy)。二、字段的使用...原创 2020-03-08 17:15:23 · 75 阅读 · 0 评论 -
(一)线程与锁
一、线程的基本概念1.1单线程简单的说,单线程就是进程中只有一个线程。单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。1.2多线程由一个以上线程组成的程序称为多线程程序。常见的多线程程序如:GUI应用程序、I/O操作、网络容器等。Java中,一定是从主线程开始执行(main方法),然后在主线程的某个位置启动新的线程。二...原创 2020-03-07 18:02:17 · 656 阅读 · 1 评论