考虑以下代码。
public class MyThread extends Thread {
int limit;
public MyThread(int limit, String name) {
super();
this.limit = limit;
this.setName(name);
}
public void run() {
printValues();
}
private synchronized void printValues() {
for (int i = 1; i < limit; i++) {
System.out.println(currentThread().getName() + " No = " + i);
}
}
}
要求:如果一个线程开始执行printValues(),假设它必须打印到10000.在完成其工作之前,没有其他线程能够进入此方法。
为此,我尝试了Lock接口,但无法实现此目的。
任何人都可以对此提出一些意见吗?
您的时间将受到高度赞赏。
答案 0 :(得分:1)
放置同步意味着线程必须获取对象实例的锁(监视器)。如果只强制执行该对象的一个实例,则会停止并发执行。
或者你可以使用静态锁来做同样的事情
private static final Object lock = new Object();
public void printValues() {
synchronized(lock) {
//...
}
}