13-案例实现
案例实现
根据如下步骤实现本案例。
1.创建一个实现了 Runnable
接口的 TaskAtomic
类:
public class TaskAtomic implements Runnable {
2.声明一个私有的 AtomicInteger
属性并命名为 number
:
private final AtomicInteger number;
3.实现该类的构造器并初始化属性:
public TaskAtomic () {
this.number=new AtomicInteger();
}
4.实现 run()
方法。在一个1000000次的循环中,使用 set()
方法将循环的次数设置为原子属性的值:
@Override
public void run() {
for (int i=0; i<1000000; i++) {
number.set(i);
}
}
5.创建一个名为 TaskLock
的类并实现 Runnable
接口:
public class TaskLock implements Runnable {
6.声明一个私有的 int
型属性并命名为 number
,以及一个私有的 Lock
属性并命名为 lock
:
private Lock lock;
private int number;
7.实现该类的构造器并初始化属性:
public TaskLock() {
this.lock=new ReentrantLock();
}
8.实现 run()
方法。在一个1000000次的循环中,把循环的次数设置到 int
型的属性上。设置前加锁,设置后释放锁:
@Override
public void run() {
for (int i=0; i<1000000; i++) {
lock.lock();
number=i;
lock.unlock();
}
}
9.实现主类,创建一个名为 Main
的类,并为其添加 main()
方法:
public class Main {
public static void main(String[] args) {
10.创建一个 TaskAtomic
对象,并将其命名为 atomicTask
:
TaskAtomic atomicTask=new TaskAtomic();
11.创建一个 TaskLock
对象,并将其命名为 lockTask
:
TaskLock lockTask=new TaskLock();
12.声明线程的数量并创建一个 Thread
对象数组来存储线程:
int numberThreads=50;
Thread threads[]=new Thread[numberThreads];
Date begin, end;
13.运行指定数量的线程以执行 TaskLock
对象。计算执行时间,并打印到控制台:
begin=new Date();
for (int i=0; i<numberThreads; i++) {
threads[i]=new Thread(lockTask);
threads[i].start();
}
for (int i=0; i<numberThreads; i++) {
try {
threads[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
end=new Date();
System.out.printf("Main: Lock results: %d\n",
(end.getTime()-begin.getTime()));
14.运行指定数量的线程以执行 TaskAtomic
对象。计算执行时间,并打印到控制台:
begin=new Date();
for (int i=0; i<numberThreads; i++) {
threads[i]=new Thread(atomicTask);
threads[i].start();
}
for (int i=0; i<numberThreads; i++) {
try {
threads[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
end=new Date();
System.out.printf("Main: Atomic results: %d\n",
(end.getTime()-begin.getTime()));