本文共 2382 字,大约阅读时间需要 7 分钟。
参考楼上,给出我的两种实现。看起来没那么高大上,但是好理解一些。
实现1:
import java.util.concurrent.atomic.AtomicInteger;
/**
* Created by ely ong on 2017/12/5.
*/
public class TestThreads {
public static void main(String[] args) {
ThreadOne t1 = new ThreadOne();
ThreadTwo t2 = new ThreadTwo();
Thread one = new Thread(t1);
Thread two = new Thread(t2);
one.start();
two.start();
}
}
class Accum {
private static Accum a = new Accum();
//private int counter = 0;
private AtomicInteger counter;
private Accum() {
counter = new AtomicInteger(0);
}
public static Accum getAccum() {
return a;
}
public void updateCounter(int add) {
//counter += add;
counter.addAndGet(add);
}
public int getCount() {
//return counter;
return counter.get();
}
}
class ThreadOne implements Runnable {
Accum a = Accum.getAccum();
public void run() {
for (int x = 0; x < 98; x++) {
a.updateCounter(1000);
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
}
}
System.out.println("one " + a.getCount());
}
}
class ThreadTwo implements Runnable {
Accum a = Accum.getAccum();
public void run() {
for (int x = 0; x < 99; x++) {
a.updateCounter(1);
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
}
if (x == 97) {
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
}
}
}
System.out.println("two " + a.getCount());
}
}
实现二:
/**
* Created by ely ong on 2017/12/5.
*/
public class TestThreads {
public static void main(String[] args) {
ThreadOne t1 = new ThreadOne();
ThreadTwo t2 = new ThreadTwo();
Thread one = new Thread(t1);
Thread two = new Thread(t2);
one.start();
two.start();
}
}
class Accum {
private static Accum a = new Accum();
private int counter = 0;
private Accum() {
}
public static Accum getAccum() {
return a;
}
public synchronized void updateCounter(int add) {
counter += add;
}
public int getCount() {
return counter;
}
}
class ThreadOne implements Runnable {
Accum a = Accum.getAccum();
public void run() {
for (int x = 0; x < 98; x++) {
a.updateCounter(1000);
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
}
}
System.out.println("one " + a.getCount());
}
}
class ThreadTwo implements Runnable {
Accum a = Accum.getAccum();
public void run() {
for (int x = 0; x < 99; x++) {
a.updateCounter(1);
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
}
if (x == 97) {
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
}
}
}
System.out.println("two " + a.getCount());
}
}
转载地址:https://blog.csdn.net/weixin_30596151/article/details/114947163 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!