`
real_junlin
  • 浏览: 19387 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

多线程题目

阅读更多

看到一个题目:针对下面的程序,写出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();
    	}
    }
 

 

0
0
分享到:
评论
3 楼 real_junlin 2012-11-09  
城堡里的卡夫卡 写道
如果是只打印出step1,step2 不打印step3,实现倒是不难,起个线程把obj的对象锁占用就可以了,但是主线程会因为申请不到obj锁而阻塞,这是典型的死锁呀!有什么教育意义吗?

这道题的目的是为了考察对多线程机制的掌握情况,目的并不是为了产生死锁。
2 楼 城堡里的卡夫卡 2012-11-08  
如果是只打印出step1,step2 不打印step3,实现倒是不难,起个线程把obj的对象锁占用就可以了,但是主线程会因为申请不到obj锁而阻塞,这是典型的死锁呀!有什么教育意义吗?
1 楼 wwwcomy 2012-11-08  
static void magic1(final Object obj) throws Exception {
Thread t = new Thread() {
public void run() {
synchronized (obj) {
while (true) {
}
}
};
};
t.start();
t.join(1);
}

LZ锁太多我有点晕  不知道上面代码行不行。。

相关推荐

    多线程面试题

    本文将围绕“多线程面试题”这一主题,深入探讨相关概念、技术及其应用。 1. **线程的概念**:线程是程序执行的最小单位,一个进程可以有多个线程同时执行任务,提高了程序的运行效率。 2. **Java中的线程创建方式...

    哈哈iOS多线程面试题

    在探讨iOS多线程的面试题目时,我们首先要明确进程和线程的定义及其关系。进程可以被理解为计算机上一次执行活动的程序,它是操作系统分配资源的基本单元,拥有独立的内存空间和运行所需的全部资源。当我们提到一个...

    C#面试题 包括 ADO.net 多线程等

    C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等

    多线程,多线程面试题,C#源码.zip

    对于C#开发者来说,理解和掌握多线程技术不仅能够优化代码性能,也是面试中常被问到的知识点。 首先,我们要理解什么是线程。线程是操作系统分配CPU时间的基本单元,一个进程可以包含一个或多个线程。主线程通常...

    史上最全 Java 多线程面试题及答案

    了解这些核心概念后,开发者可以更好地应对Java多线程面试中可能出现的问题,同时也能在实际项目中灵活运用多线程技术,提升程序性能。多线程编程虽然复杂,但掌握好相关的工具和原理,就能有效地解决并发问题,编写...

    java多线程面试题59题集合

    以下是对Java多线程面试题59题集合中可能涉及的一些关键知识点的详细解析。 1. **线程的创建方式** - 继承Thread类:创建一个新的类,该类继承自Thread类,并重写其run()方法。 - 实现Runnable接口:创建一个实现...

    java多线程面试题和答案

    以下是一些关于Java多线程的面试题及其答案,涵盖了基础概念、并发控制、线程安全以及性能优化等方面。 1. **什么是Java多线程?** 多线程是指在单个程序中同时执行多个线程,这样可以提高应用程序的效率和响应...

    java经典多线程面试题

    以下是一些经典的多线程面试题知识点: 1. Java中的线程状态有哪些? - 新建状态(New):线程对象创建后,但尚未启动。 - 就绪状态(Runnable):处于就绪状态的线程随时可能被CPU调度执行。 - 运行状态...

    Java面试题、JVM面试题、多线程面试题、并发编程、设计模式面试题

    Java面试题、JVM面试题、多线程面试题、并发编程、设计模式面试题、SpringBoot面试题、SpringCloud面试题、MyBatis面试题、Mysql面试题、VUE面试题、算法面试题、运维面试题。 收集汇总各行业笔试or编程题解题思路 ...

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题、Netty面试题、Elasticsearch面试题、Tomcat面试题、Dubbo面试题、Kafka面试题、Linux面试题、2021面试题、java面试...

    多线程,多线程面试题,C#

    在IT领域,多线程是程序设计中的一个重要概念,尤其在C#这样的.NET框架下,多线程的应用广泛且深入。本文将详细讲解C#中多线程的基础知识,以及在面试...同时,熟悉多线程面试题有助于在求职过程中展示自己的专业能力。

    热门Java面试多线程面试题问答Top50共17页.pdf

    【标题】"热门Java面试多线程面试题问答Top50共17页.pdf" 提供了一份关于Java多线程面试的重要资源,涵盖了面试中可能会遇到的50个关键问题和答案,共计17页。这表明该文档深入探讨了Java编程中的并发处理和线程管理...

    多线程面试题及回答

    ### 多线程面试题及回答 #### 一、题目概览 本文档汇集了15个顶级Java多线程面试题及其解答思路,旨在帮助求职者更好地准备涉及多线程与并发技术的相关面试。多线程是Java面试中一个不可或缺的部分,特别是在面向...

    Java面试题、JVM面试题、多线程面试题

    标题提到的是"Java面试题、JVM面试题、多线程面试题",而描述和标签却提及"python编程"。不过,既然您希望聚焦于"Java面试题、JVM面试题、多线程面试题",我将为您详细介绍这些主题。 **Java面试题** 1. **Java是...

    多线程面试题1

    以下是对多线程面试题的详细解释: 一、进程与线程的理解 1. **进程**:进程是操作系统分配资源的基本单位,它可以看作是一个应用程序在运行时的实例。在 iOS 中,每个进程都有自己的独立内存空间,可以理解为手机...

    【BAT必备】多线程面试题

    ### 【BAT必备】多线程面试题解析 #### 一、多线程基本概念 **1.1 什么是多线程?** 多线程是指在同一个应用或进程中同时执行多个线程来完成任务的一种机制。它能充分利用多核处理器的能力,提高程序运行效率。 ...

Global site tag (gtag.js) - Google Analytics