Heim  >  Artikel  >  Java  >  Wie implementiert man einen Thread-sicheren Zähler in Java? So implementieren Sie einen Thread-sicheren Zähler

Wie implementiert man einen Thread-sicheren Zähler in Java? So implementieren Sie einen Thread-sicheren Zähler

青灯夜游
青灯夜游nach vorne
2018-10-22 17:42:425390Durchsuche

In diesem Artikel erfahren Sie, wie Sie einen Thread-sicheren Zähler in Java implementieren. So implementieren Sie einen Thread-sicheren Zähler. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

  • Einführung in das Implementierungsprinzip von Thread-sicheren Zählern:
    Das Schlüsselwort volatile in Java kann die Sichtbarkeit gemeinsam genutzter Daten sicherstellen und die Daten aktualisieren Aktualisieren Sie den Arbeitsspeicher im gemeinsam genutzten Speicher, machen Sie die Daten im Arbeitsspeicher in anderen Threads ungültig und lesen Sie dann den neuesten Wert aus dem Hauptspeicher, um die Sichtbarkeit der gemeinsam genutzten Daten sicherzustellen. Der Thread-sichere Zähler wird durch zyklische CAS-Operationen implementiert . Es geht darum, zunächst einen alten erwarteten Wert zu erhalten und dann zu vergleichen, ob der erhaltene Wert mit dem Wert im Hauptspeicher übereinstimmt. Wenn sie konsistent sind, wird die Schleife bis zum Erfolg fortgesetzt 🎜>

  • Spezifische Code-Implementierung

    public class Count{
    	private int count = 0;
    	private AtomicInteger atomicI = new AtomicInteger(0);
    	public static void main(String[] args){
    		final Count cas = new Count();
    		List<Thread> list = new ArrayList<Thread>();
    		long start = System.currentTimeMillis();
    		for(int j=0;j<100;j++){
    			Thread t = new Thread(new Runnable(){
    				@Override
    				public void run(){
    					for(int i=0;i<1000;i++){
    						cas.count();
    						cas.safeCount();
    					}
    				}
    			});
    			list.add(t);
    		}
    		//启动线程
    		for(Thread t:list){
    		t.start();
    		}
    		//等待所有线程执行完毕
    		for(Thread t:list){
    			try{
    				t.join();
    				}catch(Exception e){
    				e.printStackTrace();
    				}
    		}
    		System.out.println("线程不安全:"+cas.count);
    		System.out.println("线程安全:"+cas.atomicI.get());
    		System.out.println("耗时:"+(System.currentTimeMillis() - start));
    	}
    	/**线程不安全的计数器*/
    	public void count(){
    		count++;
    	}
    	/**线程安全的计数器,循环CAS*/
    	public void safeCount(){
    		for(;;){
    			int temp = atomicI.get();
    			if(atomicI.compareAndSet(temp,++temp))
    			  break;
    		}
    	}
    }
  • Ausführungsergebnisse:

Das obige ist der detaillierte Inhalt vonWie implementiert man einen Thread-sicheren Zähler in Java? So implementieren Sie einen Thread-sicheren Zähler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen