当前位置:嗨网首页>书籍在线阅读

32-案例实现

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

案例实现

根据如下步骤来实现本案例。

1.创建一个 Incrementer 类并实现 Runnable 接口:

public class Incrementer implements Runnable {

2.声明一个 AtomicIntegerArray 类型的 vector 私有字段来存储整型数组:

private final AtomicIntegerArray vector;

3.实现该类的构造方法来初始化字段:

public Incrementer(AtomicIntegerArray vector) {
  this.vector=vector;
}

4.实现 run() 方法。通过 getAndIncrement() 方法来增加数组中所有元素的值:

@Override
public void run() {
  for (int i=0; i<vector.length(); i++){
    vector.getAndIncrement(i);
  }
}

5.创建一个 Decrementer 类并实现 Runnable 接口:

public class Decrementer implements Runnable {

6.声明一个 AtomicIntegerArray 类型的 vector 私有字段来存储整型数组:

private AtomicIntegerArray vector;

7.实现该类的构造方法并初始化其字段:

public Decrementer(AtomicIntegerArray vector) {
  this.vector=vector;
}

8.实现 run() 方法。通过 getAndDecrement() 方法来减少数组中所有元素的值:

@Override
public void run() {
  for (int i=0; i<vector.length(); i++) {
    vector.getAndDecrement(i);
  }
}

9.实现 Main 类作为主类,并添加 main() 方法:

public class Main {
  public static void main(String[] args) {

10.声明一个 THREADS 常量并赋值100。创建一个带有1000个元素的 AtomicInteger-Array 对象:

final int THREADS=100;
AtomicIntegerArray vector=new AtomicIntegerArray(1000);

11.创建一个 Incrementer 的任务来处理之前已创建的原子性数组:

Incrementer incrementer=new Incrementer(vector);

12.创建一个 Decrementer 的任务来处理之前已创建的原子性数组:

Decrementer decrementer=new Decrementer(vector);

13.创建两个数组来分别存储100个线程对象:

Thread threadIncrementer[]=new Thread[THREADS];
Thread threadDecrementer[]=new Thread[THREADS];

14.创建并启动100条线程来执行 Incrementer 的任务,并且创建并启动另外100个线程来执行 Decrementer 的任务。保存这些线程之前已创建的数组:

for (int i=0; i<THREADS; i++) {
  threadIncrementer[i]=new Thread(incrementer);
  threadDecrementer[i]=new Thread(decrementer);
  threadIncrementer[i].start();
  threadDecrementer[i].start();
}

15.用 join() 方法来等待所有线程执行完成:

for (int i=0; i<100; i++) {
  try {
    threadIncrementer[i].join();
    threadDecrementer[i].join();
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
}

16.在控制台从0开始打印不为0的原子数组元素。用 get() 方法来获取原子性数组的元素:

int errors=0;
for (int i=0; i<vector.length(); i++) {
  if (vector.get(i)!=0) {
    System.out.println("Vector["+i+"] : "+vector.get(i));
    errors++;
  }
}
if (errors==0) {
  System.out.printf("No errors found\n");
}

17.在控制台打印一条关于程序执行的信息:

System.out.println("Main: End of the example");