【发布时间】:2020-08-31 22:16:37
【问题描述】:
我必须得到这样的输出:
这是我的代码。没有错误。它以PlusThread 开头并打印第一行。然后它会释放锁。之后MultiplyThread 开始运行。它将打印所有行而不是通知PlusThread。
public class TestThread {
public static void main(String[] args) {
// TODO Auto-generated method stub
Object lock = new Object();
PlusThread pT = new PlusThread(lock, 2, 10);
pT.start();
MultiplyThread mT = new MultiplyThread(lock, 2, 10);
mT.start();
}
}
class PlusThread extends Thread {
Object lock;
int start, range;
public PlusThread(Object lock, int start, int range) {
super();
this.lock = lock;
this.start = start;
this.range = range;
}
@Override
public void run() {
synchronized (this) {
for (int i = start; i <= range; ++i) {
System.out.println(i + " + " + i + " = " + (i + i));
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
class MultiplyThread extends Thread {
Object lock;
int start, range;
public MultiplyThread(Object lock, int start, int range) {
this.lock = lock;
this.start = start;
this.range = range;
}
@Override
public void run() {
synchronized (this) {
for (int j = start; j <= range; ++j) {
System.out.println(j + " * " + j + " = " + (j * j));
this.notify();
}
}
}
}
这是我的输出:
【问题讨论】:
-
检查这个问题stackoverflow.com/questions/17472572/…它可能会有所帮助!
-
不幸的是,Java 之神选择了
synchronized作为锁定锁的构造,因为锁不 用于同步或协调不同线程的活动。锁仅用于一个目的:通过防止线程同时访问相同的变量来防止线程相互干扰。对于任何其他目的,您应该使用更高级别的同步对象;信号量、屏障、阻塞队列等
标签: java multithreading java-threads thread-synchronization