多线程系列(二)---多个线程多个锁
来源:互联网 发布:上海drs数据修复中心 编辑:程序博客网 时间:2024/05/16 01:26
多个线程多个锁:多个线程,每个线程都可以拿到自己指定的锁,分别获得锁之后,执行synchronized方法体内容。
关键字synchronized取得的锁都是对象锁,而不是把一段代码(方法)当做锁,哪个线程先执行synchronized关键字的方法,那个线程就持有该方法所属对象的锁(Lock),两个对象,线程获得的就是两个不同的锁,他们互不影响。
有一种特殊情况则是相同的锁,即在静态方法上加synchronized关键字,表示锁定class类,类一级别的锁(独占.class类)
从打印的结果我们可以看出,输出的结果有问题。因为我们在printNum方法上加了synchronized锁,那么应该是线程m1输出tag b,set count over!、taga,count=100之后才会打印b的信息。为什么会造成这样的结果呢???
原来我们声明了t1和t2两个对象,在m1线程中调取t1对象,拥有的是t1对象的锁,而m2线程中调取t2对象,拥有的是t2对象的锁。关键字synchronized取得的锁都是对象锁,这样他们就互不影响,t1和t2的信息都保存在自己的线程栈中,对其他线程不可见,所有m1和m2并发执行。
如果在printNum方法上加上static关键字,,表示锁定class类。不管声明多少个MultiThread引用,printNum方法跟随类存放在堆上,线程间会共享资源,输出结果会等m1信息输出结束之后才会开始输出m2信息。
总结:
一个对象一把锁
在静态方法上synchronized代表的是类的锁
0 0
- 多线程系列(二)---多个线程多个锁
- 多线程学习系列:(二)线程基本知识
- 多线程系列二 线程创建
- java多线程系列----------- 基本的线程机制(二)
- C++多线程系列(二)线程互斥
- Java多线程系列(二)—线程安全
- 多线程(一):生成多个线程
- 多线程(二)--线程池
- 多线程(二)--线程同步
- 多线程学习系列二 线程同步-互斥量的使用
- c# 多线程系列二 自定义线程执行器
- java线程安全篇之synchronized 多个线程多个锁(二)
- Java多线程系列1(线程基本常识)
- Java多线程系列2(守护线程)
- Java多线程系列3(线程同步)
- Java多线程系列(三)-----线程池
- 多线程系列:线程通信
- java+oracle+web(第八天) java 基础课程(二) 多线程同步和死锁(2个线程、四个线程)
- java静态绑定和动态绑定
- ARM寄存器
- (笔记)Spring实战_征服数据库(4)_在Spring中集成Hibernate
- Guava Cache使用
- const修饰指针的用法:常量指针和指针常量
- 多线程系列(二)---多个线程多个锁
- Java中Iterator的使用
- 再让我测试一下数学公式和代码高亮哈
- 1.支持向量机简介
- 设计模式——单例模式
- Android中padding和margin的区别
- Activity及Activity的生命周期
- ASP.NET 推送消息 长连接 IHttpAsyncHandler
- Android百度地图显示空白(只有格子)的具体真实解决方法