欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java兩個(gè)線程對(duì)變量進(jìn)行加1操作實(shí)例分析

本篇內(nèi)容主要講解“java兩個(gè)線程對(duì)變量進(jìn)行加1操作實(shí)例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“java兩個(gè)線程對(duì)變量進(jìn)行加1操作實(shí)例分析”吧!

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的永興網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

1--錯(cuò)誤的常規(guī)寫法

public static int i=0;public static void add(){    i=i+1;    action();}public static void action(){    System.out.println("==>"+Thread.currentThread().getName()+":"+i);}public static void main(String[] args) throws InterruptedException {    Thread t1 = new Thread(SysUserServiceImpl::add,"t1");    Thread t2= new Thread(SysUserServiceImpl::add,"t2");    t1.start();    t2.start();}運(yùn)行結(jié)果==>==>t1:1==>t2:2
==>t1:2==>t2:1
==>t1:2==>t2:2

每次運(yùn)行結(jié)果不一致,多線程環(huán)境下,t1對(duì)共享內(nèi)存中的i進(jìn)行+1操作,但未將值刷新到主內(nèi)存,此時(shí)恰好t2也對(duì)i取到還是0進(jìn)行+1操作,使得最后結(jié)果i都為1,同理t1處理完為1,t2處理完為2。多次運(yùn)行結(jié)果都不一致。

改進(jìn)方法1 --同步鎖

public class ThreadException {    public static volatile int i=0;    public static void add(){        synchronized (ThreadException.class){            i=i+1;            action();        }    }    public static void action(){        System.out.println("==>"+Thread.currentThread().getName()+":"+i);    }    public static void main(String[] args) throws InterruptedException {        Thread t1 = new Thread(ThreadException::add,"t1");        Thread t2= new Thread(ThreadException::add,"t2");        t1.start();        t2.start();
   }}

優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單

缺點(diǎn):加鎖粒度大,性能低下,分布式環(huán)境,多JVM條件,synchronized失效,synchronized 只是本地鎖,鎖的也只是當(dāng)前jvm下的對(duì)象,在分布式場(chǎng)景下,要用分布式鎖

改進(jìn)方法2 AtomicInteger

public class ThreadException {    private static AtomicInteger num = new AtomicInteger(0);    public static void add(){        int i = num.getAndIncrement();        action(i);    }    public static void action(int i){        System.out.println("由"+i+"==>"+Thread.currentThread().getName()+":"+num);    }    public static void main(String[] args) throws InterruptedException {        Thread t1 = new Thread(ThreadException::add,"t1");        Thread t2= new Thread(ThreadException::add,"t2");        t1.start();        t2.start();    }}

改進(jìn)方法3  lock

public class ThreadException {    public static volatile int i=0;    public static void action(){        System.out.println("==>"+Thread.currentThread().getName()+":"+i);    }
   static Lock lock=new ReentrantLock();    public static void inc() {        lock.lock();        try {            Thread.sleep(1);            i=i+1;            action();        } catch (InterruptedException e) {            e.printStackTrace();        } finally {            lock.unlock();        }    }    public static void main(String[] args) throws InterruptedException {        Thread t1 = new Thread(ThreadException::inc,"t1");        Thread t2= new Thread(ThreadException::inc,"t2");        t1.start();        t2.start();    }}

分布式鎖:保證多個(gè)節(jié)點(diǎn)同步執(zhí)行
實(shí)現(xiàn)方案:1?;跀?shù)據(jù)庫(kù),2.基于redis緩存,3.基于zookeeper

到此,相信大家對(duì)“java兩個(gè)線程對(duì)變量進(jìn)行加1操作實(shí)例分析”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

當(dāng)前名稱:java兩個(gè)線程對(duì)變量進(jìn)行加1操作實(shí)例分析
標(biāo)題URL:http://chinadenli.net/article10/piphdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、企業(yè)建站、網(wǎng)站收錄、網(wǎng)站策劃、、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)