java并发编程(二)多个线程多个锁
多个线程多个锁
多个线程多个锁:多个线程,每个线程都可以拿到自己制定的锁,分别获得锁之后,执行synchronized方法体的内容。就是在上次那个博客上说道的锁竞争的问题,是因为所有的线程过来以后都争抢同一个锁。如果说每个线程都可以或得到自己的锁,这样的话我们的锁竞争问题就没有了,如果这样做的话,我们去实例化一个对象,我们怎么可以保证多线程可以并行操作,并行操作完成之后又不会相互之间影响。最终的操作结果就是一样的,最简单的就是在类上面加上static,或者使用原子的方式,来避免锁竞争问题。
示例代码
package nihui.test.cn;public class MutliThread {private static int num = 0;/** static */public static synchronized void printNum(String tag) {try {if (tag.equals("a")) {num = 100;System.out.println("tag a ,set num over");Thread.sleep(1000);} else {num = 200;System.out.println("tag b , set num over");}System.out.println("tag" + tag + "num" + num);} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) { final MutliThread m1 = new MutliThread();final MutliThread m2 = new MutliThread(); Thread t1 = new Thread(new Runnable() { @Overridepublic void run() {m1.printNum("a");}}); Thread t2 = new Thread(new Runnable() { @Overridepublic void run() {m2.printNum("b"); }}); t1.start();t2.start(); }
}
运行结果
示例总结:
关键字synchronized获取到的锁都是对象锁,而不是把一段代码(方法)当做锁,所以示例代码中那个线程先执行synchronized关键字的方法,那个线程就持有该方法所属的对象锁Lock,两个对象,线程获得就是两个不同的锁,他们互不影响。
有一种情况则是相同的锁,即在静态方法上夹上synchronized关键字,表示锁定.class 类,类一级别的锁(独占.class类)
java并发编程(二)多个线程多个锁相关推荐
- [Java并发编程(一)] 线程池 FixedThreadPool vs CachedThreadPool ...
[Java并发编程(一)] 线程池 FixedThreadPool vs CachedThreadPool ... 摘要 介绍 Java 并发包里的几个主要 ExecutorService . 正文 ...
- Java 并发编程——Executor框架和线程池原理
Java 并发编程系列文章 Java 并发基础--线程安全性 Java 并发编程--Callable+Future+FutureTask java 并发编程--Thread 源码重新学习 java并发 ...
- Java并发编程|第二篇:线程生命周期
文章目录 系列文章 1.线程的状态 2.线程生命周期 3.状态测试代码 4.线程终止 4.1 线程执行完成 4.2 interrupt 5.线程复位 5.1interrupted 5.2抛出异常 6. ...
- 《Java并发编程的艺术》——线程(笔记)
文章目录 四.Java并发编程基础 4.1 线程简介 4.1.1 什么是线程 4.1.2 为什么要使用多线程 4.1.3 线程优先级 4.1.4 线程的状态 4.1.5 Daemon线程 4.2 启动 ...
- Java并发编程:进程和线程之由来
2019独角兽企业重金招聘Python工程师标准>>> Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编 ...
- Java并发编程(08):Executor线程池框架
本文源码:GitHub·点这里 || GitEE·点这里 一.Executor框架简介 1.基础简介 Executor系统中,将线程任务提交和任务执行进行了解耦的设计,Executor有各种功能强大的 ...
- Java并发编程(8)——常见的线程安全问题
线程安全问题: 多个线程同时执行也能工作的代码就是线程安全的代码 如果一段代码可以保证多个线程访问的时候正确操作共享数据,那么它是线程安全的. 具体说明: java并发线程实战(1) 线程安全和机制原 ...
- Java并发编程:进程、线程、并行与并发
一谈到Java并发编程,我们一般就会联想起进程.线程.并行.并发等等概念.那么这些概念都代表什么呢?进程与线程有什么关系?并发与并行又是什么关系呢? 01 进程与线程 进程是指程序的一次动态执行过程, ...
- 【Java 并发编程】多线程、线程同步、死锁、线程间通信(生产者消费者模型)、可重入锁、线程池
并发编程(Concurrent Programming) 进程(Process).线程(Thread).线程的串行 多线程 多线程的原理 多线程的优缺点 Java并发编程 默认线程 开启新线程 `Ru ...
- Java 并发编程(二):如何保证共享变量的原子性?
线程安全性是我们在进行 Java 并发编程的时候必须要先考虑清楚的一个问题.这个类在单线程环境下是没有问题的,那么我们就能确保它在多线程并发的情况下表现出正确的行为吗? 我这个人,在没有副业之前,一心 ...
最新文章
- 进阶必备:CNN经典论文代码复现 | 附下载链接
- 从Docker 到Jenkins 到Ansible的部署经验
- 利用Git Bash 远程访问服务器
- 车辆动力学基础(1)
- vue+element 封装公共js代码
- OA项目10:部门管理的三个细节问题的解决及处理懒加载问题
- C++Socket编程总结
- web.config forms节点中的属性的含义和用途
- RTCP协议解析--RR
- 服务器远程ghost,Ghost win7系统64位远程桌面连接教程
- 摄影培训社培训资料(上
- 兔兔 的 题解 —— 2020 CSP-J 多校赛 目录
- bzoj5369: [Pkusc2018]最大前缀和 状压Dp 计数Dp
- 一个img文件-实验吧
- 163music 反爬分析
- 【Redis】Redis介绍
- elementUI表格头添加图标-鼠标移入显示el-tooltip提示信息
- Mysql 不使用窗口函数实现分组排序 rank 别名问题
- 计算机主机光盘故障,电脑开机之后提示插入安装光盘的解决方法
- 一致 先验分布 后验分布_先验分布、后验分布、似然估计这几个概念是什么意思,它们之间的关系是什么?...