
多线程
多线程
wsjtwmy
这个作者很懒,什么都没留下…
展开
-
[Java][多线程]《Java并发编程实战》—— 第四章 对象的组合
在设计线程安全类的过程中,需要包含以下三个基本要素:找出构成对象状态的所有变量找出约束状态变量的不变性条件建立对象状态的并发访问管理策略同步策略定义了如何在不违背对象不变性条件或后验条件的情况下对其状态的访问操作进行协同。同步策略规定了如何将不可变性、线程封闭与加锁机制等结合起来以维护线程的安全性,并且还规定了哪些变量由哪些锁来保护。**原子操作的目的是为了避免无效状态的出现。**所以...原创 2019-05-12 22:06:58 · 930 阅读 · 1 评论 -
[Java][多线程]《Java并发编程实战》—— 第三章 对象的共享
synchronized的两个作用:原子性和内存可见性。在没有同步的情况下,编译器、处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整(重排序)。失效数据非原子的64位操作加锁的含义不仅仅局限于互斥行为,还包括内存可见性,为了确保所有线程都能看到共享变量的最新值,所有执行读操作或者写操作的线程都必须在同一个锁上同步。volatile不进行重排序。不会被缓存在寄存器或者对其...原创 2019-01-06 19:53:53 · 214 阅读 · 1 评论 -
[Java][多线程]《Java并发编程实战》—— 第二章 线程安全性
编写线程安全的代码,核心在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问。对象的状态同步机制:synchronized(独占的加锁方式)volatile显式锁原子变量多个线程访问同一个变量时,有3种方式保障安全:不在线程之间共享该状态变量将状态变量设计为不可变的变量在访问状态变量时使用同步程序状态的封装性越好,就越容易实现程序的线程安全性,并且代码的维护...原创 2018-12-27 19:08:45 · 231 阅读 · 1 评论 -
[Java][多线程]《Java并发编程实战》—— 第一章 简介
早期计算机每次只能运行一个程序操作系统每次能运行多个程序,不同的程序都在单独的进程中运行。操作系统为各个独立执行的进程分配各种资源,包括内存,文件句柄以及安全证书等。不同的进程之间可以通过一些粗粒度的通信机制来交换数据,包括:套接字、信号处理器、共享内存、信号量以及文件等。促进进程出现的因素:资源利用率公平性便利性线程允许在同一个进程中同时存在多个程序控制流。线程共享进程范围内的...原创 2018-12-27 18:43:01 · 285 阅读 · 1 评论 -
[Java][多线程]《Java多线程编程实战》—— 第11~14章
第11章 Serial Thread Confinement(串行线程封闭)模式将多个并发的任务存入队列实现任务的串行化。唯一的工作者线程。避免加锁。本质是使用一个开销更小的锁替换一个可能的开销更大的锁。第12章 Master-Slave(主仆)模式将一个任务分解为若干个语义等同的子任务,由专门的工作者线程来并行执行这些子任务。通过整合各个子任务的处理结果生成最后的结果。第13章 Pip...原创 2018-12-11 18:49:36 · 295 阅读 · 1 评论 -
[Java][多线程]《Java多线程编程实战》—— 第10章 Thread Specific Storage(线程特有存储)模式
Thread Specific Storage模式:不共享变量,不使用锁。不同线程使用统一的访问接入点可以获取线程特有的实例。弊端:隐藏了系统结构,隐藏了应用中各个对象之间的关系,从而使应用更加难于理解。鼓励使用全局对象。常见使用场景需要使用非线程安全对象,但不希望引入锁使用线程安全对象,但希望避免其使用锁的开销和相关问题隐式参数传递(但会使系统难于理解)特定于线程的单例模式:...原创 2018-12-10 20:20:09 · 311 阅读 · 1 评论 -
[多线程]《多处理器编程的艺术》读书笔记——第二章 互斥
临界区:某个时刻仅能被一个线程执行的代码段。良构的线程:1.一个临界区只和一个唯一的Lock对象相关联2.线程准备进入临界区时调用该对象的lock()方法3.当线程离开临界区时调用unlock()方法一个好的锁算法应该满足哪些特性:互斥:不同线程的临界区之间没有重叠。(安全特性)无死锁:个别线程可能饥饿,总有一些线程能继续执行。(活性特性)无饥饿:每一个试图获得锁的线程最终都能成功...原创 2018-12-03 20:49:31 · 520 阅读 · 1 评论 -
[多线程]《多处理器编程的艺术》读书笔记——第一章 引言
共享存储器通信方式下的多处理器编程技术。可计算性理论:理解异步并发环境中的可计算问题。安全性:不好的事情绝不会发生。活性:一个特定的好的事件一定会发生。确保一个时刻只允许一个线程执行特定代码段的问题称为互斥问题。啤酒瓶罐的例子——中断——wait()和notifyAll()旗子的例子无死锁:无饥饿:等待:互斥的本质就是等待中断:wait()和notifyAll()的本质就是中断...原创 2018-12-03 20:05:58 · 410 阅读 · 0 评论 -
[Java][多线程]《Java多线程编程实战》—— 第9章 Thread Pool(线程池)模式
一个系统中的线程相对于其所要处理的任务而言,是一种非常有限的资源。线程不仅在执行任务时需要消耗CPU时间和内存等资源,线程对象(Thread实例)本身以及线程所需的调用栈(Call Stack)也占用内存,并且Java中创建一个线程往往意味着JVM会创建相应的依赖于宿主机操作系统的本地线程(Native Thread)。因此,为每个任务创建一个线程,通常是一种奢侈而不现实的事情。常见的做法是复用一...原创 2018-11-28 20:40:15 · 267 阅读 · 1 评论 -
[Java][多线程]《Java多线程编程实战》—— 第8章 Active Object(主动对象)模式
Active Object模式是一种异步编程模式。(跟Promise模式有什么区别呢?)通过对方法的调用与方法的执行进行解耦来提高并发性。类图当Active Object模式对外暴露的异步方法被调用时,与该方法调用相关的上下文信息,包括被调用的异步方法名、参数等,会被封装成一个对象。该方法请求对象会被存入缓冲区中,由专门的工作者线程负责执行。错误隔离:一个任务的处理失败不影响其他任务的处理...原创 2018-11-26 20:23:04 · 290 阅读 · 1 评论 -
[Java][多线程]《Java多线程编程实战》——第7章 Producer-Consumer(生产者/消费者)模式
Producer-Consumer模式的核心是通过通道对数据(或任务)的生产者和消费者进行解耦,从而使二者的处理速率相对来说互不影响。类图BlockingQueueChannel:当队列满时,将当前线程挂起直到队列非满当队列为空时,将当前线程挂起直到队列非空通道积压的常见解决方法:使用有界阻塞队列使用带流量控制的无界阻塞队列工作窃取算法:一个通道可以对应一个或者多个队列实...原创 2018-11-26 19:19:45 · 296 阅读 · 1 评论 -
[Java][多线程]《Java多线程编程实战》——第4章 Guarded Suspension(保护性暂挂)模式
一个线程等待另一个线程完成一定的操作,才能继续运行。原创 2018-11-22 20:52:03 · 438 阅读 · 1 评论 -
[Java][多线程]《Java多线程编程实战》——第3章 Immutable Object(不可变对象)模式
通过使用对外可见的状态不可变的对象,无需额外的同步访问控制。既保证了数据一致性,又避免了同步访问控制所产生的额外开销和问题,也简化了编程。状态不可变的对象:对象一经创建,其对外可见的状态就保持不变,如String和Integer。Immutable Object模式:将现实世界中状态可变的实体建模为状态不可变对象,并通过创建不同的状态不可变对象来反映现实世界实体的状态变更。类图Immuta...原创 2018-11-17 17:08:12 · 272 阅读 · 1 评论 -
[Java][多线程]《Java多线程编程实战》——第2章 设计模式及其作用
设计模式与三十六计多线程设计模式简介不使用锁的情况下保证线程安全Immutable Object(不可变对象)模式Thread Specific Storage(线程特有存储)模式Serial Thread Confinement(串行线程封闭)模式优雅地停止线程Two-phase Termination(两阶段终止)模式线程协作Guarded Suspension(保...原创 2018-11-17 16:01:14 · 195 阅读 · 1 评论 -
[Java][多线程]《Java多线程编程实战》——第1章 Java多线程编程实战基础
Java线程:守护线程——不影响JVM的正常停止,常用于执行一些重要性不太高的任务用户线程——创建一个Thread实例与创建其他类实例的区别:JVM为Thread实例分配两个调用栈所需的存储空间,一个调用栈跟踪Java代码间的调用关系,另一个用于跟踪Java代码对本地代码(Native代码)的调用关系。一个Thread实例通常对应两个线程。一个是JVM线程,另一个本地(Native)线程...原创 2018-11-17 12:12:08 · 492 阅读 · 1 评论 -
[Java][多线程]《Java多线程编程实战》——第5章 Two-phase Termination(两阶段终止)模式
Two-phase Termination模式通过将停止线程分解为准备阶段和执行阶段两个阶段,提供了一种通用的优雅停止线程的方法。准备阶段:通知目标线程准备进行停止。List item设置标志变量。调用目标线程的interrupt方法。对于能够对interrupt方法调用做出响应的方法,目标线程代码可以通过捕获这些方法的InterruptException来侦测线程停止信号。对于不对...原创 2018-11-22 21:04:33 · 313 阅读 · 1 评论 -
[Java][多线程]《Java多线程编程实战》——第6章 Promise(承诺)模式
开始一个任务的执行,并得到一个用于获取该任务执行结果的凭据对象,而不必等待该任务执行完毕就可以继续执行其他操作。等到需要该任务的执行结果时,再调用凭据对象的相关方法来获取。类图获取执行结果时,可能由于异步任务尚未执行完毕而阻塞。参考:Java并发编程:Callable、Future和FutureTaskhttps://www.cnblogs.com/dolphin0520/p/394931...原创 2018-11-23 18:30:26 · 551 阅读 · 0 评论