摘要: Java使用线程来执行任务。任务即我们要并发实现的事情,任务可以用Runnable、Callable来描述,任务也体现在Thread中的Run方法上,任务也可以描述为线程执行体;线程只是任务的载体,只是任务的执行单元。**任务**和驱动他的**线程**是不一样的,体现在java上是你对Thread类实际上没有任何控制权,java的线程机制来源于c的低级的p线程方法,在物理上,创建线程可能会代价高昂... 阅读全文
posted @ 2020-03-23 00:57 cheaptalk肥皂 阅读(134) 评论(0) 推荐(0) 编辑
摘要: # 中断-interrupt本文讨论的问题是:在某些情况下,任务必须突然的终止。即有时你希望能够终止处于阻塞状态的任务(*todo: 关于何时处于堵塞请查看线程和任务中的解释*)。如果对于处于阻塞状态的任务,你不能等待其到达代码中可以检查其状态值的某一点,因而决定让它主动地终止,那么你就必须强制这个任务跳出阻塞状态。在`Runnable.run()`方法的中间打断任务,与等待任务执行方法到达检查c... 阅读全文
posted @ 2020-03-23 00:56 cheaptalk肥皂 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 当任务协作时,关键问题是这些任务之间的**握手/通信**。为了实现这种握手/通信,我们使用了相同的基础特性:互斥。互斥能够确保只有一个任务可以响应某个信号,这样就可以根除任何可能的竞争条件。在**互斥**之上,我们为任务添加了一种途径,可以将其自身挂起,直至某些外部条件发生变化(例如,管道现在已经到位),表示是时候让这个任务向前开动了为止。这种握手/通信可以通过Object的方法**wait()和... 阅读全文
posted @ 2020-03-23 00:55 cheaptalk肥皂 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 通过锁可以实现受限制资源的共享,序列化共享资源的访问。java提供了一套用于锁的机制,这套机制里主要的锁就是关键字synchronized和concurrent包中的lock类。另外也需要记住这一点:多线程加锁虽然实现互斥,但是很可能降低了处理速度,带来严重的性能问题。为了解决问题,不得不处理这样的复杂性。虽然复杂性会带来性能、可读性、可维护性上的诸多的问题。# 算法原理## CAS算法CAS全称... 阅读全文
posted @ 2020-03-23 00:54 cheaptalk肥皂 阅读(183) 评论(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:53 cheaptalk肥皂 阅读(140) 评论(0) 推荐(0) 编辑
摘要: > 并发**核心问题是**对资源的**互斥**需求,**互斥的实现**有多种方法(硬件方法和软件方法)# 互斥的方法1. 专用机器指令,较少开销但不通用。(硬件支持)2. 操作系统或程序设计语言提供某种级别的支持。(软件方法:操作系统和程序设计语言的支持)3. 进程承当实现互斥的责任,这是软件方法,增加了开销并存在缺陷。(软件方法:进程承担责任)其中方法1的几种实现有:中断禁用、专用机器指令;2的... 阅读全文
posted @ 2020-03-23 00:52 cheaptalk肥皂 阅读(199) 评论(0) 推荐(0) 编辑
摘要: > 死锁和饥饿是并发处理的两个基本问题死锁的三种常用方法:预防、检测和避免> 死锁原理1. 死锁是永久性的。2. 一组进程中的每个进程都在等待某个事件(典型情况下是等待释放所请求的资源),而仅有这组进程中被堵塞的其他进程才可以触发该事件,这样这组进程就发生了死锁。*todo: 联合进程图的死锁无法避免的区域*> 不同资源类型的死锁资源分为两类:可重用资源,可消耗资源。可重用资源是一次仅供一个进程... 阅读全文
posted @ 2020-03-23 00:51 cheaptalk肥皂 阅读(193) 评论(0) 推荐(0) 编辑
摘要: Object类是所有类的基类,了解他很是重要分类来看Object类的方法1. hashCode()和equals(Object obj)2. clone()3. notify()、notifyAll()、wait(long timeout)、wait(long timeout, int nanos)、wait()4. finalize()5. toString()# hashCode & equa... 阅读全文
posted @ 2020-03-23 00:50 cheaptalk肥皂 阅读(119) 评论(0) 推荐(0) 编辑
摘要: Object类是所有类的基类,了解他很是重要分类来看Object类的方法1. hashCode()和equals(Object obj)2. clone()3. notify()、notifyAll()、wait(long timeout)、wait(long timeout, int nanos)、wait()4. finalize()5. toString()# hashCode & equa... 阅读全文
posted @ 2020-03-23 00:37 cheaptalk肥皂 阅读(114) 评论(0) 推荐(0) 编辑
摘要: Java使用线程来执行任务。任务即我们要并发实现的事情,任务可以用Runnable、Callable来描述,任务也体现在Thread中的Run方法上,任务也可以描述为线程执行体;线程只是任务的载体,只是任务的执行单元。**任务**和驱动他的**线程**是不一样的,体现在java上是你对Thread类实际上没有任何控制权,java的线程机制来源于c的低级的p线程方法,在物理上,创建线程可能会代价高昂... 阅读全文
posted @ 2020-03-23 00:36 cheaptalk肥皂 阅读(373) 评论(0) 推荐(0) 编辑