package creative.fire.multithread;
import java.util.concurrent.CountDownLatch;
/**
* @author feuyeux@gmail.com 2011-10-13
*
*/
/*
* synchronized static void foo() { ... } is the same as
*
* static void foo() { synchronized(SomeClass.class) { ... } }
*
* synchronized void foo() { ... } is the same as
*
* void foo() { synchronized(this) { ... } }
*/
public class LockMethodTest {
private static final int timeout = 3 * 1000;
public synchronized void a(String name) throws InterruptedException {
System.out.println(name + " enter a");
Thread.sleep(timeout);
System.out.println("quit a");
}
public synchronized void b() throws InterruptedException {
System.out.println("enter b");
Thread.sleep(timeout);
System.out.println("quit b");
}
public synchronized static void c() throws InterruptedException {
System.out.println("enter c");
Thread.sleep(timeout);
System.out.println("quit c");
}
public static void main(String[] args) throws InterruptedException {
testInSameObject();
System.out.println("--------");
testInTwoObjects();
System.out.println("--------");
testClassObject();
}
private static void testClassObject() throws InterruptedException {
final CountDownLatch latch = new CountDownLatch(2);
final LockMethodTest thiz = new LockMethodTest();
new Thread(new Runnable() {
@Override
public void run() {
try {
LockMethodTest.c();
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.countDown();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
try {
thiz.a("object");
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.countDown();
}
}).start();
latch.await();
}
private static void testInTwoObjects() throws InterruptedException {
final CountDownLatch latch = new CountDownLatch(2);
final LockMethodTest thiz1 = new LockMethodTest();
final LockMethodTest thiz2 = new LockMethodTest();
new Thread(new Runnable() {
@Override
public void run() {
try {
thiz1.a("object1");
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.countDown();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
try {
thiz2.a("object2");
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.countDown();
}
}).start();
latch.await();
}
private static void testInSameObject() throws InterruptedException {
final CountDownLatch latch = new CountDownLatch(2);
final LockMethodTest thiz = new LockMethodTest();
new Thread(new Runnable() {
@Override
public void run() {
try {
thiz.a("object");
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.countDown();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
try {
thiz.b();
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.countDown();
}
}).start();
latch.await();
}
}
分享到:
相关推荐
《童虎学习笔记》mysql 8.0.28 mgr 监控视图 gr_member_routing_candidate_status
《童虎学习笔记》SQL语言高手样本数据websites.sql
《童虎学习笔记》SQL语言高手样本数据apps.sql
《童虎学习笔记》SQL语言高手样本数据access_log.sql
《Delphi技术构建的人事管理系统源码解析》 在信息技术高度发达的今天,人事管理系统已经成为了企业日常管理不可或缺的一部分。本文将围绕“人事管理系统源码.rar”这一主题,深入探讨Delphi编程语言在构建此类系统...
8. 圣斗士:童虎、史昂和穆是中国圣斗士,艾俄洛斯则来自希腊。 9. 《银魂》:鬼兵队中金色直发马尾的暴力女性角色名叫来岛又子,她是《银魂》中的一个重要角色。 10. 物理学原理:电磁炮发射炮弹利用的是洛伦茨力...
Tomcat服务器是一种免费开放源代码Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问童虎不是诸多场合下被普遍使用,是开发和调试JSP程序首选。Tomcat服务器可以独立运营,支持多种编程语言,包括Java、...
这篇文档虽然以《星座黄金圣斗士经典广告词》为标题,但实际上它是一种创意写作,将知名动漫角色“圣斗士星矢”中的角色与广告语结合,创造了一系列幽默诙谐的场景。这些广告词涉及了各种产品,如服装、食品、个人...
互动论坛:注册登录后的童虎可以进行发帖,在此可以进行查看各种帖子,以及回复跟帖等等一些列操作,可以在里面进行一些自由友善的交流。 系统概要:有联系方式,提供本系统的一些作者的联系方式以及工作人员的联系...
(6)互动论坛:注册登录后的童虎可以进行发帖,在此可以进行查看各种帖子,以及回复跟帖等等一些列操作,可以在里面进行一些自由友善的交流。 (7)系统概要:有联系方式,提供本系统的一些作者的联系方式以及工作...
(6)互动论坛:注册登录后的童虎可以进行发帖,在此可以进行查看各种帖子,以及回复跟帖等等一些列操作,可以在里面进行一些自由友善的交流。 (7)系统概要:有联系方式,提供本系统的一些作者的联系方式以及工作...