一个被锁的老帖
===========================================================================
下面的代码在绝大部分时间内都运行得很正常,请问在什么情况下会出现问题?问题的根源在哪里?
package com.heyongjin.test;
import java.util.LinkedList;
public class Stack {
LinkedList list = new LinkedList();
public synchronized void push(Object x) {
synchronized (list) {
list.addLast(x);
notify();
}
}
public synchronized Object pop() throws Exception {
synchronized (list) {
if (list.size() <= 0) {
wait();
}
return list.removeLast();
}
}
}
答:这里有可能会死锁:当外界调用pop(),但堆栈中没有元素,即list.size() <= 0,Stack进入停滞状态(wait())(注意此时list被锁定了 ,但Stack不会被锁定),此时外界仍然可以进入push()(因为wait()不会锁定Stack),但此时在push()中调用list.addLast()时,因为list 被锁定,所以无法调用。
==================================================================
答案又了,但是怎么修改程序才能避免死锁呢??
分享到:
相关推荐
Java作为世界上最受欢迎的编程语言之一,其面试题和设计模式是每位Java开发者都需要掌握的核心知识。下面我们将深入探讨这些主题,以帮助IT工作者在面试中脱颖而出,并提升自己的技术水平。 一、Java面试题 1. ...
在Java软件开发领域,英语面试...同时,对于技术问题,面试官可能还会询问关于多线程、异常处理、集合框架、设计模式、数据库操作等方面的内容。熟悉这些核心概念,并能用英语流畅地表达,将有助于你在面试中脱颖而出。
面试是评估一个开发者技能的关键环节,对于大公司的Java面试,通常会涵盖广泛的知识点,包括基础语法、面向对象编程、集合框架、多线程、异常处理、IO流、网络编程、设计模式、JVM内存管理、数据库操作、算法与数据...
5. **多线程**:Java提供了内置的线程支持,面试中可能讨论线程同步(如synchronized关键字、wait()、notify())、线程池、并发工具类(如ExecutorService、Semaphore、CyclicBarrier)等。 6. **内存管理与垃圾...
Java作为世界上最受欢迎的编程语言之一,其面试题的深度和广度都反映了应聘者对语言的理解和实际应用能力。这份“最全Java面试题汇总”无疑是准备Java面试者的宝贵资源。下面,我们将根据标题和描述,结合三个压缩...
180多页面试题,前前后后不间断的更新了两年,准备换工作时,总是拿来看看,有比较好的面试题,也不间断的更新,面试题目录如下: 【基础】面向对象的特征有哪些方面 13 抽象 13 继承 13 封装 13 多态性 13 【基础】...
Java作为世界上最受欢迎的编程语言之一,其面试题涵盖了广泛的领域,包括基础知识、数据结构与算法、多线程、网络编程、I/O、JVM、设计模式等。以下是一些基于标题和描述中提及的Java面试知识点的详细说明: 1. **...
这份"Java基础面试题大全"涵盖了从语法、面向对象编程、集合框架到异常处理、多线程、IO流等Java核心领域的常见面试问题。以下是这些知识点的详细说明: 1. **Java语法基础**:包括变量、数据类型、运算符、流程...
本压缩包中的资料丰富多样,包括了Java基础、JSP、代码编程题、线程编程、EJB(Enterprise JavaBeans)以及数据库相关的面试题,对求职者来说具有极高的参考价值。 首先,Java基础方面是面试的必考项,涵盖了Java...
这里我们将深入探讨一些Java经典面试题,帮助求职者或开发者更好地准备面试。 1. **Java基础** - **数据类型**:Java有两大类数据类型——基本类型和引用类型。了解它们的区别,例如int与Integer。 - **对象生命...
Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等...
Java作为世界上最受欢迎的编程语言之一,其面试题涵盖了广泛的领域,包括基础知识、数据结构与算法、多线程、网络编程、异常处理、集合框架、IO流、反射、设计模式、JVM内存管理以及框架应用等多个方面。下面我们将...
这份“java部分面试题答案.7z”压缩包文件包含了多个关键领域的面试专题及其答案,涵盖了从基础到高级的Java技术,包括并发编程、消息中间件、Spring框架、分布式协调服务Zookeeper、微服务Spring Cloud、垃圾收集器...
每个主题下都包含一系列具体问题,例如在多线程中,可能问到死锁的条件和避免方法;在集合框架中,可能会讨论ArrayList和LinkedList的性能差异;在JVM部分,可能会探讨堆内存的分区和垃圾收集算法。理解并能熟练应用...
2. **MySQL的技术特点**:MySQL是一个多线程、支持多种客户端的SQL服务器,包括不同的后台、API接口和管理工具。它强调高性能、高可靠性、易于使用和开源。 3. **Heap表**:Heap表是一种内存中的临时表,适用于快速...
这份"【Java核心知识面试】-各大公司Java后端开发面试题总结.zip"文件显然是一份宝贵的资源,它涵盖了Java后端开发面试中常被问到的核心知识点。以下是对这些知识点的详细解释: 1. **基础语法**:包括类、对象、...
这份"Java面试题2023最新整理二期"的压缩文件显然包含了今年最热门、最重要的Java技术面试知识点。以下是对这些知识点的详细解读: 1. **基础语法**:这是每个Java开发者都必须掌握的,包括但不限于变量、数据类型...
7. **C专家编程**:这本书名暗示了一个关于C编程的深入指南,可能涵盖了高级主题,如位操作、模板、内存优化和错误处理策略,对提升C编程技能非常有帮助。 8. **46家公司笔试面试题、c语言面试题,c++面试题下载**:...
如对答案有疑问,欢迎留言讨论。 小编将这些面试问题大致分为四类: 什么(what)?如何做(how)?说区别/谈优势(difference)以及实践操作(practice)。 What? 1. 什么是Python? Python是一种编程语言,它有...
5. **多线程**:Java提供了丰富的多线程支持,面试中可能会讨论线程的创建、同步机制(如synchronized关键字、volatile、Lock接口)、线程池等。 6. **IO流**:输入/输出流的分类、使用方式以及NIO(New IO)和NIO....