Java 应用与开发 - 线程编程▶ 访问临界资源的那段代码就是临界区,临界区必须互斥地使 用。 大纲 线程基础 线程控制 线程的同步 互斥锁 ▶ Java 引入对象互斥锁机制来实现线程的互斥操作,保证共 享数据操作的完整性。 ▶ Java 中每个对象都有一个互斥锁与之相连,用来保证在任 一时刻,只能有一个线程访问该对象。 ▶ 多线程对临界资源的并发访问是通过竞争互斥锁实现的。 大纲 线程基础 线程控制 线程的同步 synchronized 的用法 为了保证互斥,Java 语言使用synchronized关键字标识同步 的资源,包括: ▶ 对象 1 synchronized(对象) { 2 临界代码段 3 } ▶ 方法 1 public synchronized 返回值类型 方法名 { 2 方法体 3 } 等效方式: 1 public 返回值类型 方法名 { 2 synchronized(this) 8 } 大纲 线程基础 线程控制 线程的同步 synchronized 的功能 ▶ 首先判断对象或者方法的互斥锁是或否存在,若存在就获得 互斥锁,然后执行紧随其后的临界代码段或方法体; ▶ 如果对象或方法的互斥锁不在(已经被其他线程拿走),就 进入线程等待状态,直到获得互斥锁。 课程配套代码 ± sample.thread.syn.WithdrawMoneyFromBankSample0 码力 | 82 页 | 1010.73 KB | 1 年前3
《Java 应用与开发》课程讲义 - 王晓东. . . . 194 14.3.2 什么是临界资源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 14.3.3 互斥锁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 14.3.4 synchronized 的用法 . 在一个时刻只能被一个线程访问的资源就是临界资源。 • 访问临界资源的那段代码就是临界区,临界区必须互斥地使用。 14.3.3 互斥锁 • Java 引入对象互斥锁机制来实现线程的互斥操作,保证共享数据操作的完整性。 • Java 中每个对象都有一个互斥锁与之相连,用来保证在任一时刻,只能有一个线 程访问该对象。 • 多线程对临界资源的并发访问是通过竞争互斥锁实现的。 . . . . . . . . . . . . . . . . . . . . . 中国海洋大学信息学院计算机系 第 195 页 / 共 306 页 14.3. 线程的同步 � 14 � 14.3.4 synchronized 的用法 为了保证互斥,Java 语言使用synchronized关键字标识同步的资源,包括: • 对象 1 synchronized(对象) { 2 临界代码段 3 } • 方法 1 public synchronized0 码力 | 330 页 | 6.54 MB | 1 年前3
跟我学Shiro - 张开涛true,即已经通过身份验证;如果 isRemembered 返回 true,表示是 通过记住我功能登录的而不是调用 login 方法登录的。isAuthenticated/isRemembered 是互斥 的,即如果其中一个返回 true,另一个返回 false。 3、角色授权验证 hasRole*进行角色验证,验证后返回 true/false;而 checkRole*验证失败时抛出 此处使用了 Cache 缓存用户名—会话 id 之间的关系;如果量比较大可以考虑如持久化到数 据库/其他带持久化的 Cache 中;另外此处没有并发控制的同步实现,可以考虑根据用户名 获取锁来控制,减少锁的粒度。 另外可参考 JavaEE 项目开发脚手架,其提供了后台踢出用户的功能: https://github.com/zhangkaitao/es/blob/master/web/0 码力 | 219 页 | 4.16 MB | 10 月前3
Apache Shiro 1.2.x Reference Manual 中文翻译将返回验证后的 Subject 实例,subject.isAuthenticated()) 将返回 true。 但是如果 login 失败了呢?例如,用户提供了一个错误的密码或者因访问系统次数过多而被锁 定将会怎样呢? Shiro拥有丰富的运行期异常AuthenticationException可以精确标明为何验证失败,你可以将 login 放入到 try/catch 块中并捕获所有你想捕获的异常并对它们做出处理。例如: isAuthenticated()) 将返回真。 Apache Shiro 1.2.x Reference Manual 中文翻译 37 5. Authentication 认证 互斥的 已记住(Remembered)和已验证(Authenticated)是互斥的--一个标识值为真另一个就为 假,反过来也一样。 Why the distinction?为什么区分? 验证(authentication)有明显的证0 码力 | 196 页 | 2.34 MB | 1 年前3
Java 对象的创建过程开销,但优点就是它 以用来对离散的空间进行内存分配。 最后在分配内存时,可能也会存在并发安全的问题,为了解决该问题,虚拟机采用两种方式来解决: ● CAS+失败重试: CAS 是乐观锁的一种实现方式。所谓乐观锁就是,每次不加锁而是假设没有冲突 去完成某项操作,如果因为冲突失败就重试,直到成功为止。虚拟机采用 CAS 配上失败重试的方式 证更新操作的原子性。 ● TLAB: 为每一个线程预先在 初始化零值完成之后,虚拟机要对对象进行必要的设置 ,例如这个对象是哪个类的实例、如何才能找 类的元数据信息、对象的哈希码、对象的 GC 分代年龄等信息。 这些信息存放在对象头中。 另外, 据虚拟机当前运行状态的不同,如是否启用偏向锁等,对象头会有不同的设置方式。 执行init()方法 上边一些列工作完成之后,从虚拟机角度来看,实际上一个对象已经产生了。但从Java程序的角度来 ,对象创建才刚刚开始---构造函数,即Class0 码力 | 4 页 | 389.87 KB | 1 年前3
Hello 算法 1.2.0 繁体中文 Java 版加法雜湊:對輸入的每個字元的 ASCII 碼進行相加,將得到的總和作為雜湊值。 ‧ 乘法雜湊:利用乘法的不相關性,每輪乘以一個常數,將各個字元的 ASCII 碼累積到雜湊值中。 ‧ 互斥或雜湊:將輸入資料的每個元素透過互斥或操作累積到一個雜湊值中。 ‧ 旋轉雜湊:將每個字元的 ASCII 碼累積到一個雜湊值中,每次累積之前都會對雜湊值進行旋轉操作。 // === File: simple_hash (char c : key.toCharArray()) { hash = (31 * hash + (int) c) % MODULUS; } return (int) hash; } /* 互斥或雜湊 */ int xorHash(String key) { int hash = 0; final int MODULUS = 1000000007; for (char c : key 消除週期性模式,提升雜湊演 算法的穩健性。 6.3.3 常見雜湊演算法 不難發現,以上介紹的簡單雜湊演算法都比較“脆弱”,遠遠沒有達到雜湊演算法的設計目標。例如,由於加 法和互斥或滿足交換律,因此加法雜湊和互斥或雜湊無法區分內容相同但順序不同的字串,這可能會加劇雜 湊衝突,並引起一些安全問題。 第 6 章 雜湊表 www.hello‑algo.com 131 在實際中,我們通常會用一些標準雜湊演算法,例如0 码力 | 379 页 | 18.79 MB | 10 月前3
Apache Shiro参考手册中文版方法被调用并且没有抛出异常)。如果 subject.isAuthenticated()返回 true 则认为 Subject 已通过验证。 Mutually Exclusive(互斥) Remembered 和 Authenticated 是互斥的——若其中一个为真则另一个为假,反之亦然。 为何有这样的区别? “身份验证”这个词有很强的证明的意思在里面。也就是说,有一个预期保证 Subject 已经证明他们是他们所0 码力 | 92 页 | 1.16 MB | 1 年前3
Nacos架构&原理
proxy_pass 指定后端 Nacos 的接口 url limit_publish_config 对写操作进行限流,可以有效防止热点写问题。对同⼀个数据的高频写会触 发 mysql 的行锁,从而导致 mysql 的多线程任务因等待行锁排队,最终导致 mysql 所有操作都 超时服务不可用。这里通过 nginx lua 模块获取 post 请求的参数,设置 limit_key 。 limit_req_zone0 码力 | 326 页 | 12.83 MB | 9 月前3
共 8 条
- 1













