java怎么让程序不输出_java线程问题,如何修改代码,让程序能够正常输出如下结果?...
发布日期:2022-02-03 04:38:29 浏览次数:15 分类:技术文章

本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:c# java map_C# 中SharpMap的简单使用实例详解
下一篇:java pages_Pages.java

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年03月26日 12时12分03秒