目录
编程要求
请仔细阅读右侧代码,根据方法内的提示,在Begin - End
区域内进行代码补充。
####测试说明
预期输出:10000
。
提示:可以使用两种方式实现原子性,所以本关有多种方式都可以通关。
方法一:
//方法1:
package step4;
public class Task {
public volatile int inc = 0;
//请在此添加实现代码
/********** Begin **********/
public synchronized void increase() {
inc++;
}
/********** End **********/
public static void main(String[] args) {
final Task test = new Task();
for (int i = 0; i < 10; i++) {
new Thread() {
public void run() {
for (int j = 0; j < 1000; j++)
test.increase();
};
}.start();
}
while (Thread.activeCount() > 1) // 保证前面的线程都执行完
Thread.yield();
System.out.println(test.inc);
}
}
方法二:
//方法2
package step4;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Task {
public volatile int inc = 0;
//请在此添加实现代码
/********** Begin **********/
Lock lock=new ReentrantLock();
public void increase() {
lock.lock();
inc++;
lock.unlock();
}
/********** End **********/
public static void main(String[] args) {
final Task test = new Task();
for (int i = 0; i < 10; i++) {
new Thread() {
public void run() {
for (int j = 0; j < 1000; j++)
test.increase();
};
}.start();
}
while (Thread.activeCount() > 1) // 保证前面的线程都执行完
Thread.yield();
System.out.println(test.inc);
}
}