【2013-11-27】《Java编程思想》读书笔记:synchronized
·

[历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2013-11-27| 标题:《Java编程思想》读书笔记:synchronized | 分类: 编程 / java / think_in_java | 标签:java·think in java·多线程·synchronized
《Java编程思想》读书笔记:synchronized
整理 Java 多线程相关技术,这里备份 synchronized 关键字的使用代码,展示方法级和代码块级两种同步方式。
SyncTest.java
public class SyncTest
{
private static SyncTest instance = new SyncTest();
public static void test()
{
new Thread(new Runnable()
{
@Override
public void run()
{
for (int i = 0; i < 5; i++)
{
instance.funA();
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
new Thread(new Runnable()
{
@Override
public void run()
{
for (int i = 0; i < 5; i++)
{
instance.funB();
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
public synchronized void funA()
{
System.out.println("A start");
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("A end");
}
public void funB()
{
synchronized (this)
{
System.out.println("B start");
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("B end");
}
}
}
部分日志输出
A start
A end
B start
B end
A start
A end
B start
B end
A start
A end
B star
备注
funA() 使用 synchronized 修饰方法,funB() 使用 synchronized(this) 代码块,两者锁的对象相同(当前实例),互斥效果一致。日志显示 A start/end 和 B start/end 不会交错出现。
更多推荐




所有评论(0)