如何锁定Java中的线程的代码块

时间:2018-03-08 12:49:16

标签: java android multithreading java-ee

考虑以下代码。

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接口,但无法实现此目的。

任何人都可以对此提出一些意见吗?

您的时间将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

放置同步意味着线程必须获取对象实例的锁(监视器)。如果只强制执行该对象的一个​​实例,则会停止并发执行。

或者你可以使用静态锁来做同样的事情

private static final Object lock = new Object();

public void printValues() {
    synchronized(lock) {
        //...
    }
}