锁是Java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。 锁的获取和释放 线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。 线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的临界区代码必须从 ...
分类:
其他好文 时间:
2019-07-14 15:22:52
阅读次数:
113
信号量(semaphore),也和互斥锁一样提供了线程间或者进程间的同步功能。 信号量有三种: "Posix有名字的信号量" Posix基于内存的信号量 System V信号量 信号量比互斥锁高级,互斥锁只允许一个线程访问临界区,信号量可以多个,可以把信号量看作成互斥锁的升级版,但是如果能用互斥锁解 ...
分类:
系统相关 时间:
2019-06-22 19:53:26
阅读次数:
156
以下内容针对互斥锁。 为什么需要锁? 锁代表着对临界区的访问权限。只有获得锁的操作对象,才能进入临界区。 锁的本质是什么? 锁的本质是一个数据结构(或者说是一个对象),这个对象内保留着描述锁所需要的必要信息。如当前锁是否已被占用,被哪个线程占用。而锁的一些工具,函数库,实际上就是对一个锁对象的信息进 ...
分类:
其他好文 时间:
2019-06-17 17:04:04
阅读次数:
114
并发性:互斥和同步 基本概念 原子操作:一个函数或动作由一个或多个指令的序列实现,对外是不可见的;保证指令的序列要么作为一个组执行, 要么都不执行,对系统状态没有可见的影响。保证了并发的隔离。 临界区:一段代码,在这段代码中进程将访问共享资源,当另一个进程已经在这段代码中运行时,这个进程就不能在这段 ...
分类:
其他好文 时间:
2019-06-15 15:10:12
阅读次数:
105
同步互斥 线程间通信方法 1.通信方法:线程间使用全局变量进行通信 2.共享资源争夺 共享资源:多个进程或者线程都可以操作的资源称为共享资源。对共享资源的操作代码段称为临界区。 影响 : 对共享资源的无序操作可能会带来数据的混乱,或者操作错误。此时往往需要同步互斥机制协调操作顺序。 3.同步互斥机制 ...
分类:
编程语言 时间:
2019-06-07 22:42:23
阅读次数:
154
1.synchronized关键字:它通过在对象上加锁后进入临界区来达到临界区串行访问的目的,而对象本身的作用域将决定锁的粒度。普通方法前加synchronized即给当前类所在的对象加上了锁标记。给静态方法前加上synchronized即就是锁住了当前类的Class对象。 2.悲观锁:必须进行锁操 ...
分类:
其他好文 时间:
2019-06-04 16:18:05
阅读次数:
143
java线程 同步临界区:thinking in java4 21.3.5 thinking in java 4免费下载:http://download.csdn.net/detail/liangrui1988/7580155 package org.rui.thread.critical; imp ...
分类:
编程语言 时间:
2019-05-03 11:30:13
阅读次数:
140
1、解释并发与并行,并说明两者关系。 并发:当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。这种方式我们称之为并发。 并行:当系统有一个 ...
分类:
系统相关 时间:
2019-04-26 00:18:33
阅读次数:
233
信号量,用于控制并发的线程的数目。信号量在JUC下的实现,每当一个线程进入临界区信号量减少,线程释放锁后信号量增加。 1.1 简单使用 初始化permit为10的信号量,acquire减少2,release增加2,本质上等价于permit=5,acquire release都是1的信号量,并发线程数 ...
分类:
其他好文 时间:
2019-04-23 23:53:00
阅读次数:
275
理解并发 这是我在开发者头条看到的。@编程原理林振华 有目标的提升自己会事半功倍,前行的道路并不孤独。 1、阻塞 当一个线程进入临界区(公共资源区)后,其他线程必须在临界区外等待,待进去的线程执行完成任务离开临界去后,其它线程才能进去。 2、无饥饿 线程排队先来后到,不管优先级大小,先来先执行,,就 ...
分类:
编程语言 时间:
2019-04-13 01:09:35
阅读次数:
147