`
nirvana_blanks
  • 浏览: 40342 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

线程ABC顺序打印之

阅读更多

 

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多线程每个线程挨着打印ABC的4种实现方式

    java多线程每个线程挨着打印ABC的4种实现方式,有4个线程t1、t2、t3、t4,t1打印A后t2打印A再t3打印A再t4打印A,然后从新回到t1打印B再t2打印B...t4打印B... 4个线程轮流打印abc... 一个线程可以理解为一个人,打印...

    java多线程实现轮流打印ABC

    使用多线程和阻塞队列实现了ABC字母按顺序轮流打印

    Java多线程连续打印abc实现方法详解

    Java多线程连续打印abc实现方法详解 Java多线程连续打印abc实现方法详解是 Java 编程...解决 Java 多线程连续打印abc问题需要使用同步机制来确保三个线程的顺序执行。可以使用两个锁或信号量来实现该问题的解决方案。

    三个线程交错输出

    为了实现交错输出,我们需要控制线程的执行顺序,确保它们在特定时刻能够交替访问共享资源(在这种情况下,共享资源是打印序列)。 在Java中,我们可以创建三个继承自Thread类的子类,每个子类代表一个线程,并重写...

    线程分解详细

    // 使用同步机制保证ABC顺序 synchronized (PrintChar.class) { PrintChar.class.notifyAll(); } try { // 让当前线程等待 synchronized (PrintChar.class) { PrintChar.class.wait(); } } catch ...

    线程按指定顺序输出字符到数组的实例代码

    有三个线程,线程1的功能就是向字符数组输出A,线程2的功能就是向字符数组输出B,线程2的功能就是向字符数组输出C,要求按顺序向数组赋值ABCABCABC,ABC的个数由线程函数1的参数指定。 接口说明: void Init(); //...

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

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

    some problems met in java learning

    由于"Abc"在字母顺序上位于"abc"之前,compareTo返回的是一个负整数,具体是两个字符串第一个不相等字符的Unicode值之差。在这里,'A'的Unicode值比'a'大32,所以返回值是-32,对应选项B。 问题66: Java的File类...

    操作系统实验2进程管理报告.doc

    由于缺乏同步机制,输出顺序是不确定的,可能是abc、acb、bca等。这展示了并发执行的特点,即进程执行的相对顺序取决于调度策略。 在进程控制环节,将每个进程的输出从单个字符改为一句完整的话。尽管输出语句不再...

    java面试题目

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

    2021-2022计算机二级等级考试试题及答案No.19979.docx

    等价的是`COPY ABC.TXT+XYZ.TXT`和`TYPE XYZ.TXT>>ABC.TXT`,因为两者都实现了将`XYZ.TXT`的内容追加到`ABC.TXT`末尾。 2. wait()方法:wait()是Java中Object类的方法,用于让当前线程进入等待状态,直到其他线程...

    2021-2022计算机二级等级考试试题及答案No.9060.docx

    - 正确的命令为`OPENDATABASE abc`(选项A),这表示打开名为abc的数据库。 ### 编程语言基础 7. **注释语句:** - `REM`语句用于添加注释,可以在代码中单独成行,用于解释代码功能或目的。 8. **字符串长度...

    2021-2022计算机二级等级考试试题及答案No.13235.docx

    fun函数内部的m覆盖了main函数中的全局m,因此fun函数返回x*y-m的结果是2,main函数中打印的是这个结果除以全局m(13),得到2/13,整数部分为0。正确答案是B。 15. ASP.NET页面生命周期:在ASP.NET中,Page类的...

    2021-2022计算机二级等级考试试题及答案No.9850.docx

    12. 进程与线程的区别:进程是资源分配的基本单位,拥有独立的内存空间,而线程是CPU调度的基本单位,共享进程的内存空间,线程间的通信更高效,但线程崩溃会直接影响整个进程。 13. SQL BETWEEN操作:在SQL中,...

    java复习题答案.pdf

    表达式中的算术操作也遵循特定的运算顺序,例如在`a*(++b)`和`a*(b++)`这样的递增运算中,结果可能不同,因为递增操作有不同的前置和后置版本。 在Java GUI编程中,`getForeground()`是获取组件前景色的方法。...

    Java面试问题 TXT格式

    编写一个程序获取字符串中的字符,如果字符是“ABC”则停止获取,并打印已获取的字符 示例代码如下: ```java public class CharExtractor { public static void main(String[] args) { String input = "ABCDEF...

    java面试题

    以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 107 84.4. 现在输入n个数字,以逗号”,”分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset 108 84.5. 金额...

    2021-2022计算机二级等级考试试题及答案No.19641.docx

    5. 线程调用sleep()方法后,线程将进入阻塞状态,等待指定时间后才会重新变为就绪状态,因此答案包含ABC。 6. 对于给定的二叉树,前序遍历的顺序是先访问根节点,再遍历左子树,最后遍历右子树。根据题目给出的图形...

Global site tag (gtag.js) - Google Analytics