`
chairmanMao
  • 浏览: 16869 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Java 交替打印A,B,C问题

阅读更多
    今天无意中看到CSDN上zyplus关于wait,notify的精彩讲述,原文地址在:http://blog.csdn.net/zyplus/article/details/6672775,但文中的示例程我拷贝下来后发现是死锁,看了下面的评论,找到了问题所在。仔细回想了程序的执行过程,还原了一下死锁的发生过程,过程如下。
     这个程序的执行过程:线程a获取c的锁,获取自身锁,打印A,notify操作,c进行wait操作,线程a不能访问c;
切换到线程b,获取a的锁,获取自身锁,打印B,notify操作,a进行wait操作,线程b不能访问a;
切换到线程c,获取b的锁,获取到自身锁,打印C,notify操作(现在线程a可以访问c了),b进行wait操作;
    进行完第9次时,b,a都进行了wait操作,线程b不能访问a,线程c不能访问b;第10次时线程a打开自身,关闭c(线程a不能访问c),同于线程b不能访问a,线程c不能该问b,第11次时线程a执行完,无法打开自身;那么线程b不能访问a,于是它就开始等待a打开自身,c就会等待b打开自身,从而锁住程序
分享到:
评论

相关推荐

    js代码-实现类似与java的多线程打印 实现交替打印1a2b3c4

    这段代码中,`printNumberAndLetter`函数用于打印数字和字母,`main`函数则按顺序调用这些函数,模拟了交替打印1a2b3c4的过程。 6. README.txt - 这个文件通常包含项目或代码的说明,可能包含了关于如何运行或...

    阿里笔试与答案

    3. 编程语言基础:C++、Java、Python等主流编程语言的关键特性和语法。 4. 计算机网络:TCP/IP五层模型、HTTP协议、DNS解析、网络安全等。 5. 操作系统:进程与线程、内存管理、文件系统、死锁等概念。 6. 计算机...

    Java多线程实现同时输出

    反之,线程B会检查flag是否为false,如果是,则打印B并把flag设为true,唤醒线程A。这样就形成了交替打印的效果。 如果我们想要扩展到三个线程,分别打印A、B、C,我们可以创建一个名为ThreadABC的类,并添加一个...

    java面向对象程序设计习题大全

    通过大量的练习题,不仅可以加深对Java基础知识的理解,还能培养解决问题的能力。此外,书中还涵盖了一些高级主题,如多线程、异常处理、文件操作和GUI设计等。 #### 第一章:Java基础 **知识点概述**: 1. **...

    中国邮政储蓄银行计算机类招聘Java笔试题.DOC

    19. C程序执行:fun函数在条件x为非零时返回y,所以最后的结果取决于a和b的值,由于字符'9'的ASCII码大于'8',所以程序输出b的值,即'8'。 20. C++程序运行:fun函数接受结构体指针并打印name,程序将打印第三个...

    Java面试宝典-经典

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...

    java面试题大全(2012版)

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...

    java基础经典题及答案

    该程序根据输入的成绩,输出相应的等级(A/B/C)。 **代码解析:** ```java import java.util.Scanner; public class lianxi05 { public static void main(String[] args) { int x; char grade; Scanner s = ...

    java代码-三个线程轮流输出abc

    在这个问题中,有三个线程分别代表A、B、C三个角色,它们需要按照特定顺序(ABC、BCA、CAB、...)交替打印字符。为了实现这个功能,开发者通常会用到Java的线程同步机制,如synchronized关键字、wait()和notify()...

    最新Java面试宝典pdf版

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...

    蓝桥杯第六届省赛(Java语言C组部分习题)试题解答.pdf

    ### 蓝桥杯第六届省赛(Java语言C组部分习题)试题解答 #### 1. 隔行变色 **题目描述**: 小明需要设计一种Excel表格的颜色样式,使得表格中的每一行颜色交替出现,即第1行为蓝色,第2行为白色,第3行再变为蓝色,...

    java面试宝典2012

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 67 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...

    Java面试宝典2012新版

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...

    Java面试宝典2012版

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到...

    试题5.doc————电子版_doc版

    5. **Java继承与多态**:在给定的Java代码示例中,类D的main方法创建了A、B和C类的对象,并调用了它们的f()方法。由于A、B和C的关系,A和B没有f()方法,所以它们的行为取决于实际的对象类型。C类扩展了B类,并重写了...

Global site tag (gtag.js) - Google Analytics