多线程模式

多线程模式

  • (一)Single Threaded Execution 是指“以1个线程执行”的意思,有时也称为Critical Section(临界区)。

  • (二)Immutable 是“永恒的”“不会改变”的意思。在Immutable Patttern中,有着能够保证实例状态绝不会改变的类(immutable 类)。因为访问这个实例时,可以省去使用共享互斥机制所会浪费的时间,提高系统性能。java.lang.String就是一个Immutable的类。

  • (三)guarded 是“被保护着的”、“被防卫着的”意思,suspension则是“暂停”的意思。当现在并不适合马上执行某个操作时,就要求想要执行该操作的线程等待,这就是Guarded Suspension Pattern。
    Guarded Suspension Pattern 会要求线程等候,以保障实例的安全性,其它类似的称呼还有guarded wait、spin lock等。

  • (四)Balking是“退缩不前”的意思。Balking Pattern和Guarded Suspension Pattern 一样需要警戒条件。在Balking Pattern中,当警戒条件不成立时,会马上中断,而Guarded Suspension Pattern 则是等待到可以执行时再去执行。

  • (五)Producer-Consumer Pattern 就是生产者-消费者模式。
    生产者和消费者在为不同的处理线程,生产者必须将数据安全地交给消费者,消费者进行消费时,如果生产者还没有建立数据,则消费者需要等待。
    一般来说,可能存在多个生产者和消费者,不过也有可能生产者和消费者都只有一个,当双方都只有一个时,我们也称之为Pipe Pattern

  • (六)Read-Write Lock Pattern 将读取与写入分开处理,在读取数据之前必须获取用来读取的锁定,而写入的时候必须获取用来写入的锁定。因为读取时实例的状态不会改变,所以多个线程可以同时读取;但是,写入会改变实例的状态,所以当有一个线程写入的时候,其它线程既不能读取与不能写入。

  • (七)Thread-Per-Message 模式是指每个message一个线程,message可以理解成“消息”、“命令”或者“请求”。每一个message都会分配一个线程,由这个线程执行工作,使用Thread-Per-Message Pattern时,“委托消息的一端”与“执行消息的一端”回会是不同的线程。

  • (八)Work Thread 模式和Thread-Per-Message模式类似,Thread-Per-Message每次都创建一个新的线程处理请求,而Work Thread模式预先会创建一个线程池(Thread Pool),每次从线程池中取出线程处理请求。

  • (九)Future 模式用来获取线程的执行结果。在Thread-Per-Message模式中,如果调用一个线程异步执行任务,没有办法获取到返回值,就像:
    host.request(10,'A');
    而Future模式送出请求后,马上就要获取返回值,就像:
    Data data=host.request(10,'A');
    但是上述的返回值并不是程序的执行结果,因为线程是异步的,主线程调用该该方法时,异步线程可能才刚刚启动。需要一段时间后像下面这样获取执行结果:
    data.getContent();

  • (十)Thread-Specific Storage(ThreadLocal) 就是“线程独有的存储库”,该模式会对每个线程提供独有的内存空间。
    java.lang.ThreadLocal类提供了该模式的实现,ThreadLocal的实例是一种集合(collection)架构,该实例管理了很多对象,可以想象成一个保管有大量保险箱的房间。

    java.lang.ThreadLocal类的方法:

    • public void set()

    该方法会检查当前调用线程,默认以该线程的Thread.currentThread()值作为键,来保存指定的值。

    • public Object get()

    该方法会检查当前调用线程,默认以该线程的Thread.currentThread()值作为键,获取保存指定的值。


posted @ 2020-12-14 17:17  Siten616  阅读(185)  评论(0编辑  收藏  举报