`

面试题多线程ABC顺序打印,不能使用sleep

阅读更多
package com.study.thread;   
  
/**  
 *  
 * @author nirvana  
 */  
public class MyThreadPrinter {   
  
    public static void main(String[] args) {   
  
        MyLock lock = new MyLock();   
  
        Thread a = new Thread(new MyPrinter("A", "B", lock));   
        Thread b = new Thread(new MyPrinter("B", "C", lock));   
        Thread c = new Thread(new MyPrinter("C", "A", lock));   
  
        a.start();   
        b.start();   
        c.start();   
  
        lock.setHolder("A");   
    }   
  
    static class MyPrinter implements Runnable {   
  
        private String myName;   
        private String nextName;   
        private final MyLock lock;   
  
        public MyPrinter(String myName, String nextName, MyLock lock) {   
            this.myName = myName;   
            this.nextName = nextName;   
            this.lock = lock;   
        }   
  
        public void run() {   
            int count = 10;   
            while (count > 0) {   
                //   
                if (lock != null && lock.getHolder() != null && lock.getHolder().equals(myName)) {   
                    synchronized (lock) {   
                        System.out.println(myName);   
                        count--;   
                        lock.setHolder(nextName);   
                    }   
                }   
  
            }   
        }   
    }   
  
    static class MyLock {   
  
        public MyLock() {   
        }   
        private String holder;   
  
        public String getHolder() {   
            return holder;   
        }   
  
        public void setHolder(String holder) {   
            this.holder = holder;   
        }   
    }   
}  
分享到:
评论

相关推荐

    java面试题大全(2012版)

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    java面试题

    如果不使用Hibernate自带的分页,则采用什么方式分页? 62 71.16. hibernate中一对多配置文件返回的是什么? 63 71.17. hibernate拒绝连接、服务器崩溃的原因?最少写5个 63 71.18. Hibernate主键介绍 63 71.18.1. ...

    java笔试面试题及答案.pdf

    【Java笔试面试题及答案解析】 ...以上是针对Java笔试面试题的相关知识点详解,涵盖了线程、构造函数、异常处理、接口、方法重写/重载、Struts框架、Servlet调试、Session使用、JSP标签和MVC模式等多个方面。

    java面试题集合

    根据提供的文件信息,我们可以整理出以下关键的Java知识点: ...这些知识点涵盖了异常处理、静态变量、字符串常量池、线程同步、设计模式等多个方面,对于准备Java面试的人来说是非常有价值的复习材料。

    JAVA面试题集-整理

    ### JAVA面试题集知识点解析 #### 1. Java与C++中的异常处理机制对比 Java中的异常处理机制是其安全性和健壮性的重要组成部分。在Java中,异常是指程序运行时发生的任何非预期事件,这些事件可能会导致程序无法...

    java面试题-解密版

    ### Java面试题解析 #### 1. 数据库连接池的工作机制 数据库连接池是一种用于管理数据库连接的技术。它预先创建多个数据库连接,并将其保存在一个池中。当应用程序需要访问数据库时,可以从池中获取一个已经建立好...

    java面试题目

    - 打印ABC:涉及线程同步和控制,可能用到Thread.sleep()、synchronized关键字等。 - 生产者消费者模型:使用队列数据结构,配合wait()、notify()方法实现。 7. **字符串操作优化**: - 反向输出字符串:不使用...

    java面试笔试题大汇总(doc 100页)要有的都有了

    Java面试笔试题大汇总涵盖了Java语言的核心概念和关键特性,是面试者准备面试的重要参考资料。以下将详细解析其中提到的一些重要知识点: 1. **final, finally, finalize的区别**: - `final` 关键字用于声明变量...

    Java面试经典试题及答案- SpringArt - JavaEye技术网站

    此外,`Hashtable`是线程安全的,这意味着它可以同步地被多个线程访问,而`HashMap`不是线程安全的,如果在多线程环境中使用,需要手动同步。 ### 5. Collection vs Collections - `Collection`是Java集合框架中的...

    Java面试宝典-经典

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    java面试宝典2012

    各种java面试题集,面试前必备哦, 1. Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 8 2、Java有没有goto? 8 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套...

    最新Java面试宝典pdf版

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    Java面试宝典2012新版

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    JAVA面试宝典2010

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    Java面试宝典2012版

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本...

    java面试宝典

    70、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 17 71、启动一个线程是用run()还是start()? 17 72、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 18 73...

Global site tag (gtag.js) - Google Analytics