题目:如何线程安全的实现一个计数器?--youdaoyunbiji中Java面经

     * 题目:如何线程安全的实现一个计数器?

//在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);
		}
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_43137176/article/details/89061471