摘要: # 中断-interrupt本文讨论的问题是:在某些情况下,任务必须突然的终止。即有时你希望能够终止处于阻塞状态的任务(*todo: 关于何时处于堵塞请查看线程和任务中的解释*)。如果对于处于阻塞状态的任务,你不能等待其到达代码中可以检查其状态值的某一点,因而决定让它主动地终止,那么你就必须强制这个任务跳出阻塞状态。在`Runnable.run()`方法的中间打断任务,与等待任务执行方法到达检查c... 阅读全文
posted @ 2020-03-23 00:35 cheaptalk肥皂 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 当任务协作时,关键问题是这些任务之间的**握手/通信**。为了实现这种握手/通信,我们使用了相同的基础特性:互斥。互斥能够确保只有一个任务可以响应某个信号,这样就可以根除任何可能的竞争条件。在**互斥**之上,我们为任务添加了一种途径,可以将其自身挂起,直至某些外部条件发生变化(例如,管道现在已经到位),表示是时候让这个任务向前开动了为止。这种握手/通信可以通过Object的方法**wait()和... 阅读全文
posted @ 2020-03-23 00:34 cheaptalk肥皂 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 在任何线程池中,现有线程在可能的情况下,都会被自动复用。# 引言> 合理利用线程池能够带来三个好处1. 降低**资源消耗**。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2. 提高**响应速度**。当任务到达时,任务可以不需要的等到线程创建就能立即执行。3. 提高线程的**可管理性**。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分... 阅读全文
posted @ 2020-03-23 00:34 cheaptalk肥皂 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 通过锁可以实现受限制资源的共享,序列化共享资源的访问。java提供了一套用于锁的机制,这套机制里主要的锁就是关键字synchronized和concurrent包中的lock类。另外也需要记住这一点:多线程加锁虽然实现互斥,但是很可能降低了处理速度,带来严重的性能问题。为了解决问题,不得不处理这样的复杂性。虽然复杂性会带来性能、可读性、可维护性上的诸多的问题。# 算法原理## CAS算法CAS全称... 阅读全文
posted @ 2020-03-23 00:33 cheaptalk肥皂 阅读(129) 评论(0) 推荐(0) 编辑
摘要: > 并发是很多问题的基础,是对进程和线程管理的核心问题,并发是编程中相当重要的问题。但与此同时理解并发编程和理解面向对象的难度差不多,如果要理解他,则注定是一条艰辛的道路。所有事物在任意时刻都只能执行一个步骤,即顺序编程是简单且基本的。但是对于某些复杂问题,并行的执行是方便的且必要的。# 并发基本概念操作系统核心问题是进程和线程的管理,不同情形有**单处理**系统、**多处理器**系统、**分布式... 阅读全文
posted @ 2020-03-23 00:32 cheaptalk肥皂 阅读(339) 评论(0) 推荐(0) 编辑
摘要: # Copy-On-Write(COW)Copy-On-Write简称COW(不会产奶的奶牛),是一种用于程序设计中的优化策略。Copy On Write技术在Linux和文件系统中均有应用,Linux通过Copy On Write技术极大地**减少了Fork的开销**,文件系统通过Copy On Write技术一定程度上保证**数据的完整性**。(*todo: 专门写一篇文章去阐述这个事情*)而... 阅读全文
posted @ 2020-03-23 00:32 cheaptalk肥皂 阅读(112) 评论(0) 推荐(0) 编辑
摘要: > 并发**核心问题是**对资源的**互斥**需求,**互斥的实现**有多种方法(硬件方法和软件方法)# 互斥的方法1. 专用机器指令,较少开销但不通用。(硬件支持)2. 操作系统或程序设计语言提供某种级别的支持。(软件方法:操作系统和程序设计语言的支持)3. 进程承当实现互斥的责任,这是软件方法,增加了开销并存在缺陷。(软件方法:进程承担责任)其中方法1的几种实现有:中断禁用、专用机器指令;2的... 阅读全文
posted @ 2020-03-23 00:31 cheaptalk肥皂 阅读(246) 评论(0) 推荐(0) 编辑
摘要: > 死锁和饥饿是并发处理的两个基本问题死锁的三种常用方法:预防、检测和避免> 死锁原理1. 死锁是永久性的。2. 一组进程中的每个进程都在等待某个事件(典型情况下是等待释放所请求的资源),而仅有这组进程中被堵塞的其他进程才可以触发该事件,这样这组进程就发生了死锁。*todo: 联合进程图的死锁无法避免的区域*> 不同资源类型的死锁资源分为两类:可重用资源,可消耗资源。可重用资源是一次仅供一个进程... 阅读全文
posted @ 2020-03-23 00:30 cheaptalk肥皂 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 如果一个程序只包含固定数量的并且生命周期都是已知的对象,那么这是一个非常简单的程序。 学习或精通一门语言,熟悉类库很大程度上也是必须的要求。 面向接口编程而不是面向实现编程 Introduction 在程序中包含固定个数的对象常常来讲是不太可能的,总会有大量的数据在一个地方等着我们把他们放到一个桶里 阅读全文
posted @ 2020-02-26 22:49 cheaptalk肥皂 阅读(214) 评论(0) 推荐(0) 编辑
摘要: > 本文所有内容基于以下几个要点- String不可变- String重载了"+"- 对象进行字符串相加会调用toString方法- StringBuilder 和 StringBuffer- JVM 常量池> 阅读完本文,你将对java字符串创建、字符串相加、jvm常量区(内存区域)有一个新的认识,提前感谢你的阅读。# String注意事项## 不可变String- String类中每一个特看起... 阅读全文
posted @ 2020-02-26 22:46 cheaptalk肥皂 阅读(340) 评论(0) 推荐(0) 编辑