美文网首页
多线程设计模式阅读日记

多线程设计模式阅读日记

作者: 黄褐色猫头鹰 | 来源:发表于2019-05-29 09:08 被阅读0次

    1.多线程的常用方法

    wait(), notify(), notifyAll(), 方法都必须在同步代码中,而Thread.sleep()不需要。wait方法,notify方法,notifyAll方法都需要由具体的所对象去调用,才会进入具体对象的wait set 或者 唤醒 对应对象的wait set里面的线程!

    2.多个同步代码块使用同一个所对象,多个线程,在一个时间点,只能进入一个同步代码块。

    3. 死锁产生的情况

    有两种,1,是互相持有锁对象,互相等待;2,多个线程都在wait,都没有持有锁对象,没有线程来唤醒,导致一直wait

    4. 锁的出现,必然是为了保护某个对象或者属性

    5. single thread execution pattern:

    一次只能有一个线程执行

    6. immutable pattern:

    不会有线程安全问题的对象设计;一般这种对象都是一次性的

    7. gurded suspension pattern:

    这种pattern包含,guarded object(被守护的对象),guarded method(被守护只能一个线程执行的方法),以及state change method(改变状态的方法,同样也只能一次一个线程执行);比较经典的案例就是阻塞队列,队列里没有新的元素,get方法就会一直阻塞;

    8.balking pattern:

    劝退模式,如果一个人已经介入了,其他人直接劝退;和guarded suspension pattern很类似,但是最大的不同就是,这里不会阻塞,其他线程该干嘛干嘛;

    9 producer consumer pattern:

    生产者消费者模式,生产者和消费者通过队列进行解耦,队列类,会有put方法和get方法,这两个方法都必须是同步方法;

    10 read write locker:

    读写锁,锁对象,通过readlock方法,readlockRelease方法,writelock方法,writelockRelease方法修改自身属性(正在读的线程数量,正在写的线程数量),同时通过guarded suspension pattern 判断条件是否满足,如果不满足就wait(),来实现操作的互斥;

    11 Java内存模型:

    Java的内存模型可以当做,工作内存,和主存。工作内存的变量是从主存中拷贝出来的,工作内存的变量被修改后,会在某一时刻被同步到主存中。正常情况下两个方向的同步时间都是不确定的。这就造成了,变量值不同步的问题。在某些需要变量具有实时性的场景中,可以使用synchronize,和violate来保证全局变量的可见性;

    相关文章

      网友评论

          本文标题:多线程设计模式阅读日记

          本文链接:https://www.haomeiwen.com/subject/sgetbqtx.html