小编Bro*_*bas的帖子

Java多线程 - Threadsafe计数器

我从一个非常简单的多线程示例开始.我正在尝试制作线程安全计数器.我想创建两个线程,间歇性地递增计数器以达到1000.代码如下:

public class ThreadsExample implements Runnable {
     static int counter = 1; // a global counter

     public ThreadsExample() {
     }

     static synchronized void incrementCounter() {
          System.out.println(Thread.currentThread().getName() + ": " + counter);
          counter++;
     }

     @Override
     public void run() {
          while(counter<1000){
               incrementCounter();
          }
     }

     public static void main(String[] args) {
          ThreadsExample te = new ThreadsExample();
          Thread thread1 = new Thread(te);
          Thread thread2 = new Thread(te);

          thread1.start();
          thread2.start();          
     }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,while循环现在意味着只有第一个线程可以访问计数器,直到达到1000.输出:

Thread-0: 1
.
.
.
Thread-0: 999
Thread-1: 1000
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?如何让线程共享计数器?

java multithreading counter thread-safety

10
推荐指数
2
解决办法
3万
查看次数

标签 统计

counter ×1

java ×1

multithreading ×1

thread-safety ×1