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种实现方式,有4个线程t1、t2、t3、t4,t1打印A后t2打印A再t3打印A再t4打印A,然后从新回到t1打印B再t2打印B...t4打印B... 4个线程轮流打印abc... 一个线程可以理解为一个人,打印...
使用多线程和阻塞队列实现了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(); //...
在这个问题中,有三个线程分别代表A、B、C三个角色,它们需要按照特定顺序(ABC、BCA、CAB、...)交替打印字符。为了实现这个功能,开发者通常会用到Java的线程同步机制,如synchronized关键字、wait()和notify()...
由于"Abc"在字母顺序上位于"abc"之前,compareTo返回的是一个负整数,具体是两个字符串第一个不相等字符的Unicode值之差。在这里,'A'的Unicode值比'a'大32,所以返回值是-32,对应选项B。 问题66: Java的File类...
由于缺乏同步机制,输出顺序是不确定的,可能是abc、acb、bca等。这展示了并发执行的特点,即进程执行的相对顺序取决于调度策略。 在进程控制环节,将每个进程的输出从单个字符改为一句完整的话。尽管输出语句不再...
- 打印ABC:涉及线程同步和控制,可能用到Thread.sleep()、synchronized关键字等。 - 生产者消费者模型:使用队列数据结构,配合wait()、notify()方法实现。 7. **字符串操作优化**: - 反向输出字符串:不使用...
等价的是`COPY ABC.TXT+XYZ.TXT`和`TYPE XYZ.TXT>>ABC.TXT`,因为两者都实现了将`XYZ.TXT`的内容追加到`ABC.TXT`末尾。 2. wait()方法:wait()是Java中Object类的方法,用于让当前线程进入等待状态,直到其他线程...
- 正确的命令为`OPENDATABASE abc`(选项A),这表示打开名为abc的数据库。 ### 编程语言基础 7. **注释语句:** - `REM`语句用于添加注释,可以在代码中单独成行,用于解释代码功能或目的。 8. **字符串长度...
fun函数内部的m覆盖了main函数中的全局m,因此fun函数返回x*y-m的结果是2,main函数中打印的是这个结果除以全局m(13),得到2/13,整数部分为0。正确答案是B。 15. ASP.NET页面生命周期:在ASP.NET中,Page类的...
12. 进程与线程的区别:进程是资源分配的基本单位,拥有独立的内存空间,而线程是CPU调度的基本单位,共享进程的内存空间,线程间的通信更高效,但线程崩溃会直接影响整个进程。 13. SQL BETWEEN操作:在SQL中,...
表达式中的算术操作也遵循特定的运算顺序,例如在`a*(++b)`和`a*(b++)`这样的递增运算中,结果可能不同,因为递增操作有不同的前置和后置版本。 在Java GUI编程中,`getForeground()`是获取组件前景色的方法。...
编写一个程序获取字符串中的字符,如果字符是“ABC”则停止获取,并打印已获取的字符 示例代码如下: ```java public class CharExtractor { public static void main(String[] args) { String input = "ABCDEF...
以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 107 84.4. 现在输入n个数字,以逗号”,”分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset 108 84.5. 金额...
5. 线程调用sleep()方法后,线程将进入阻塞状态,等待指定时间后才会重新变为就绪状态,因此答案包含ABC。 6. 对于给定的二叉树,前序遍历的顺序是先访问根节点,再遍历左子树,最后遍历右子树。根据题目给出的图形...