synchronized关键字与对象锁
来源:互联网 发布:李泽厚美的历程知乎 编辑:程序博客网 时间:2024/06/06 03:57
1、首先定义一个类Myobject。其中 methodA()为同步方法,methodB()为非同步方法
public class MyObject {
synchronized public void methodA(){
try {
System.out.println("begin methodA name:"+Thread.currentThread().getName());
Thread.sleep(2000);
System.out.println("end Time:"+System.currentTimeMillis());
} catch (Exception e) {
e.printStackTrace();
}
}
public void methodB(){
try {
System.out.println("begin methodB name:"+Thread.currentThread().getName()+" begin time:"+
System.currentTimeMillis());
Thread.sleep(2000);
System.out.println("end");
} catch (Exception e) {
e.printStackTrace();
}
}
}
2、定义两个线程类,ThreadA和ThreadB在其run方法中分别调用MyObject 的methodA()和methodB()
public class ThreadA extends Thread{
private MyObject object;
public ThreadA(MyObject object) {
this.object = object;
}
@Override
public void run() {
super.run();
object.methodA();
}
}
public class ThreadB extends Thread{
private MyObject object;
public ThreadB(MyObject object) {
this.object = object;
}
@Override
public void run() {
super.run();
object.methodB();
}
}
3、在main方法运行
public static void main(String[] args) {
MyObject object = new MyObject();
ThreadA a = new ThreadA(object);
a.setName("A");
ThreadB b = new ThreadB(object);
b.setName("B");
a.start();
b.start();
}
4、打印结果
begin methodA name:A
begin methodB name:B begin time:1495549479884
end
end Time:1495549481884
5、将Myobject类中的methodB()方法也加上关键字synchronized,再次运行main函数,打印结果如下:
begin methodA name:A
end Time:1495549998374
begin methodB name:B begin time:1495549998374
end
由此我们可以得出以下结果:
1、A线程先持有object对象的Lock锁,B线程可以以异步的方式调用object对象中的非synchronized类型的方法
2、A线程先持有object对象的Lock锁,B线程如果在这时调用object对象中的synchronized类型方法,则需要等待,也就是同步。
------------转自Java多线程编程核心技术
- synchronized关键字与对象锁
- synchronized关键字与对象锁
- java synchronized关键字,类锁,对象锁详解
- synchronized&synchronized(something)与对象锁
- synchronized&synchronized(something)与对象锁
- synchronized关键字修饰对象锁,同步与非同步对该方法的访问及修改
- @synchronized关键字与self关键字
- 关键字volatile与关键字synchronized
- @synchronized关键字与self关键字
- synchronized 方法与锁对象
- synchronized关键字与锁的探究
- 多线程:Java内置锁与synchronized关键字
- Java内置锁与synchronized关键字
- 多线程与synchronized关键字
- volatile与synchronized关键字
- synchronized与volatile关键字
- volatile与synchronized关键字
- 对象监视器,线程关键字synchronized
- C++常用字符串分割方法实例汇总
- Day 1 CNN进阶之旅
- ANR问题浅析
- 学习hadoop3
- Shell脚本基础18-until循环
- synchronized关键字与对象锁
- 解决myeclipse2015无法查看servlet等源码的问题
- postfix+mysql,dovecot+mysql
- Educational Codeforces Round 21总结
- WebRTC源码分析四:视频模块结构
- POJ 3616
- 将阿拉伯数字 翻译为 罗马数字
- Linux grep的应用
- IOS绘制圆形图片