Java 多线程(PART IX) synchronized(II) 对对象进行加锁
来源:互联网 发布:淘宝自动装修软件 编辑:程序博客网 时间:2024/05/12 16:54
此代码用于证明线程锁的是对象:
示例代码:
package a;class MyObject{ public void methodA() { try { System.out.println("begin methodA threadName="+Thread.currentThread().getName()); Thread.sleep(5000); System.out.println("end"); } catch (InterruptedException e) { e.printStackTrace(); } }}class Thread_OA extends Thread{ private MyObject object; public Thread_OA(MyObject object) { this.object=object; } @Override public void run() { this.object.methodA(); }}class Thread_OB extends Thread{ private MyObject object; public Thread_OB(MyObject object) { this.object=object; } @Override public void run() { this.object.methodA(); }}public class SynTest3 { public static void main(String[] args) { MyObject object=new MyObject(); Thread_OA oa=new Thread_OA(object); oa.setName("A"); Thread_OB ob=new Thread_OB(object); ob.setName("B"); oa.start(); ob.start(); }}
在上面这段代码中没有对方法进行加锁。
输出结果:
begin methodA threadName=Bbegin methodA threadName=Aendend
结果分析:
可以看到一共有两个线程同时在执行 methodA方法。因为没有对象methodA添加synchronized关键字。
对象methodA方法添加synchronized
synchronized public void methodA() { try { System.out.println("begin methodA threadName="+Thread.currentThread().getName()); Thread.sleep(5000); System.out.println("end"); } catch (InterruptedException e) { e.printStackTrace(); } }
修改后的代码如上
输出结果
begin methodA threadName=Aendbegin methodA threadName=Bend
结果分析
可以看到,此时两个线程没有同时进入methodA方法,也就是在线程A持有对象的lock锁的情况下,B线程如果想执行methodA方法则需要等待。
阅读全文
0 0
- Java 多线程(PART IX) synchronized(II) 对对象进行加锁
- Java对对象进行保存和读取
- 排序(对对象进行排序)二
- Java多线程(PART II) CurrentThread()方法
- Java列表对对象排序
- Java内存管理(三)Java对对象的引用
- JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序
- JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序
- JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序
- JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序
- JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序
- JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序
- Java对对象的引用(强,软,弱,虚)
- Java 多线程(PART VIII)synchronized(I)
- Collections.sort()对对象进行排序
- 按规则对对象数组进行排序
- 对对象的某些属性进行排序
- Collections.sort()对对象进行排序
- Advanced Programming in UNIX Environment Episode 8
- python3 学习之路2
- python 中的闭包
- Python笔记6
- 剑指offer之丑数
- Java 多线程(PART IX) synchronized(II) 对对象进行加锁
- 【JZOJ 5395】【NOIP2017提高A组模拟10.6】Count
- struts2的原理和工作机制
- thrift(1)------基于thrift通信组件的简单RPC服务
- 二维数组中的查找
- CentOS7的网络配置
- 课后习题page101.pp3.4
- 请详细说下你对vue生命周期的理解?
- Homebrew包管理器的安装与使用