用java完成:使用同步锁,假设有三个线程(A、B、C)实现线程A执行完了才可以执行线程B,C执行完了再可以执行C,如有四个线程以此类推 启动3个线程 线程1 每一次输入一个字符或字符串,例如A 线程2 每一次输入一个字符或字符串,例如B 线程3 每一次输入一个字符或字符串,例如C 连续3次 要求结果输入是A B C A B C A B C 这种连续的(最后有一个空格)。
时间: 2024-03-25 16:40:42 浏览: 208
JAVA实现线程的方法
以下是使用同步锁实现的Java代码:
```
public class SyncLockDemo {
private static int count = 0;
private static final Object lock = new Object();
public static void main(String[] args) {
Thread threadA = new Thread(new Task("A"));
Thread threadB = new Thread(new Task("B"));
Thread threadC = new Thread(new Task("C"));
threadA.start();
threadB.start();
threadC.start();
}
static class Task implements Runnable {
private String name;
public Task(String name) {
this.name = name;
}
@Override
public void run() {
while (count < 9) {
synchronized (lock) {
if (count % 3 == name.charAt(0) - 'A') {
System.out.print(name + " ");
count++;
lock.notifyAll();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
}
```
这段代码中,我们使用了一个静态变量count来记录当前已经输出了多少个字符,使用了一个静态的Object类型的对象lock作为同步锁,线程之间的通信使用了wait()和notifyAll()方法。在Task类中,每个线程都会进入一个死循环,每次获取锁之后,判断当前应该输出哪个字符,如果是该线程输出,则输出该字符,将count加1,然后唤醒所有等待该锁的线程;否则等待该锁,直到被唤醒。当count达到9时,所有线程退出循环,程序结束。
阅读全文