//在Java面经的5 个 答案集合中
//https://blog.csdn.net/puzimengya/article/details/81064455
* 思路:使用synchronized关键字修饰计数器方法
* 并且使用AtomicInteger类线程安全的一种原子操作的Integer类进行操作
*
package test;
import java.util.concurrent.atomic.AtomicInteger;
public class No5MySafeCalcThread1 implements Runnable {
private static AtomicInteger count = new AtomicInteger(0);
//在Java面经的5 个 答案集合中
//https://blog.csdn.net/puzimengya/article/details/81064455
/*
* 题目:如何线程安全的实现一个计数器?
* 思路:使用synchronized关键字修饰计数器方法
* 并且使用AtomicInteger类线程安全的一种原子操作的Integer类进行操作
*
* */
public static void main(String[] args) {
// TODO Auto-generated method stub
//设置了6个线程,对其中静态变量count进行自增,并输出当前的线程和计数值
for(int i = 0;i < 6;i ++) {
No5MySafeCalcThread1 thread = new No5MySafeCalcThread1();
Thread t = new Thread(thread);
t.start();
}
}
public void run() {
while(true) {
No5MySafeCalcThread1.calc();
try {
Thread.sleep(0);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public synchronized static void calc() {
// TODO Auto-generated method stub
if((count.get())<1000) {
int c = count.incrementAndGet(); //自增1,并返回更新值
System.out.println("正在运行的线程"+Thread.currentThread().getName()+":"+c);
}
}
}