第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Java中的AtomicInteger 原子操作

標(biāo)簽:
Java

Java中的AtomicInteger


今天我们将研究AtomicIntegerJava。原子操作在单个任务单元中执行,不受其他操作的干扰。在多线程环境中,原子操作是必要的,以避免数据不一致。

AtomicInteger

AtomicInteger,java atomicinteger,原子整数

让我们创建一个简单的多线程程序,其中每个线程将共享count变量递增4次。所以如果有两个线程,那么它们完成后的count值应该是8。

JavaAtomic.java

package com.journaldev.concurrency;public class JavaAtomic {
    public static void main(String[] args) throws InterruptedException {
        ProcessingThread pt = new ProcessingThread();
        Thread t1 = new Thread(pt, "t1");
        t1.start();
        Thread t2 = new Thread(pt, "t2");
        t2.start();
        t1.join();
        t2.join();
        System.out.println("Processing count=" + pt.getCount());
    }}class ProcessingThread implements Runnable {    private int count;
    @Override
    public void run() {        for (int i = 1; i < 5; i++) {
            processSomething(i);
            count++;
        }
    }
    public int getCount() {        return this.count;
    }
    private void processSomething(int i) {        // processing some job
        try {
            Thread.sleep(i * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }}

如果您将运行上述程序,您会注意到该count值在5,6,7,8之间变化。原因是count ++不是原子操作。因此,当一个线程读取它的值并将其递增1时,其他线程已读取较旧的值,从而导致错误的结果。


要解决这个问题,我们必须确保count上的递增操作是原子的,我们可以使用Synchronization来实现,但是Java 5 java.util.concurrent.atomic提供了int和long的包装类,可以用来实现这种原子操作而不使用Synchronization。


Java AtomicInteger示例

这是更新的程序,它总是将计数值输出为8,因为AtomicInteger方法incrementAndGet()原子地将当前值增加1。

package com.journaldev.concurrency;import java.util.concurrent.atomic.AtomicInteger;public class JavaAtomic {
    public static void main(String[] args) throws InterruptedException {
        ProcessingThread pt = new ProcessingThread();
        Thread t1 = new Thread(pt, "t1");
        t1.start();
        Thread t2 = new Thread(pt, "t2");
        t2.start();
        t1.join();
        t2.join();
        System.out.println("Processing count=" + pt.getCount());
    }}class ProcessingThread implements Runnable {    private AtomicInteger count = new AtomicInteger();
    @Override
    public void run() {        for (int i = 1; i < 5; i++) {
            processSomething(i);
            count.incrementAndGet();
        }
    }
    public int getCount() {        return this.count.get();
    }
    private void processSomething(int i) {        // processing some job
        try {
            Thread.sleep(i * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }}

使用并发类进行原子操作的好处是我们不需要担心同步。这提高了代码的可读性,减少了错误的可能性。假设原子操作并发类比涉及锁定资源的同步更有效。


點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消