看到一个题目:针对下面的程序,写出magic方法 让整个程序只打印出step1,step2 不打印step3
public static void enter(Object obj) {
System.out.println("Step 1");
try {
magic1(obj);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Step 2");
synchronized (obj) {
System.out.println("Step 3 (never reached here)");
}
}
题目的意思很容易理解,可是要做出这道题目需要对多线程的基本改进非常的理解。
下面列出基本思路:
主线程想获取obj的锁,但是获取不到,说明子线程始终在占据着这个对象的锁。
同时主线程又能返回。
那现在就要实现让子线程先跑,然后再唤醒主线程。这个显然是锁的占有和唤醒,那么问题来了,将什么做为这个锁呢?如果是obj的话,不可能,因为子线程显然不能在放掉obj.
那么只能是子线程自己的锁。
下边是程序
static void magic1(final Object obj) throws Exception{
final Thread t = new Thread(){
public void run(){
synchronized(this){
synchronized(obj){
try {
notify();
join();
} catch (InterruptedException e) {
}
}
}
}
};
synchronized(t){
t.start();
t.wait();
}
}
分享到:
相关推荐
多线程面试题
iOS多线程面试题
多线程,多线程面试题,C#源码.zip
C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等
面试题和答案. 有多线程, 数据库,框架题目等知识点
【BAT必备】多线程面试题【BAT必备】多线程面试题【BAT必备】多线程面试题【BAT必备】多线程面试题【BAT必备】多线程面试题【BAT必备】多线程面试题【BAT必备】多线程面试题【BAT必备】多线程面试题【BAT必备】多...
2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题、Netty面试题、Elasticsearch面试题、Tomcat面试题、Dubbo面试题、Kafka面试题、Linux面试题、2021面试题、java面试...
java经典多线程面试题。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会...
面试题c++mysql多线程操作系统 面试题c++mysql多线程操作系统 面试题c++mysql多线程操作系统 面试题c++mysql多线程操作系统 面试题c++mysql多线程操作系统
Java多线程面试题,作为多线程面试题,非常经典。
15个顶级Java多线程面试题答案
史上最全 Java 多线程面试题及答案.docx
15个顶级Java多线程面试题及回答.docx
java多线程面试经典,内含50道常被面试官问到的java多线程题。
Java多线程运行机制、并发处理面试题目深层解读。
java大厂的多线程面试题,涵盖了基础和进阶的多线程的理论和实际的应用,供各位下载使用。多线程面试题
Java 多线程面试题及答案