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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

多線程:(五)多個(gè)線程之間共享數(shù)據(jù)

標(biāo)簽:
Java

简单的总结一下多线程共享数据的方式。其实,最重要的,是一个思想,一个面向对象的编程思想的建立。

说两点:
一、如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,卖票系统就可以这么做。

/**
 * 卖票处理
 * @author yang
 */
public class SellTicket {  
    //卖票系统,多个窗口的处理逻辑是相同的
    public static void main(String[] args) {
        Ticket t = new Ticket();
        new Thread(t).start();
        new Thread(t).start();
    }
}

/**
 * 将属性和处理逻辑,封装在一个类中
 * @author yang
 */
class Ticket implements Runnable{

    private int ticket = 10;
    public synchronized void run() {
        while(ticket>0){
            ticket--;
            System.out.println("当前票数为:"+ticket);
        }
    }
}

打印结果:
当前票数为:9
当前票数为:8
当前票数为:7
当前票数为:6
当前票数为:5
当前票数为:4
当前票数为:3
当前票数为:2
当前票数为:1
当前票数为:0

二,如果每个线程执行的代码不同,这时候需要用不同的Runnable对象,例如,设计2个线程。一个线程对j增加1,另外一个线程对j减1,银行存取款。

/**
 * 一个线程加1,一个线程减1
 * @author yang
 */
public class MultiThreadShareData {

    public static void main(String[] args) {
        ShareData data = new ShareData();
        new Thread(new MyRunnable1(data)).start();
        new Thread(new MyRunnable2(data)).start();
    }

}

class MyRunnable1 implements Runnable {
    private ShareData data;

    public MyRunnable1(ShareData data) {
        this.data = data;
    }

    public void run() {
        data.decrement();
    }
}

class MyRunnable2 implements Runnable {
    private ShareData data;

    public MyRunnable2(ShareData data) {
        this.data = data;
    }

    public void run() {
        data.increment();
    }
}

class ShareData {

    private int j = 10;

    public synchronized void increment() {
        j++;
        System.out.println("线程:" + Thread.currentThread().getName() + "加操作之后,j = " + j);
    }

    public synchronized void decrement() {
        j--;
        System.out.println("线程:" + Thread.currentThread().getName() + "加操作之后,j = " + j);
    }
}
关键还是思想:将共享数据和处理逻辑,封装在一个类中。业务逻辑(即加1的线程和减1的线程操作)在执行时,直接调用该类中的处理逻辑。这样做,更符合面向对象,更易于维护。

总结一下,对于多线程间对共享变量的操作,还是要实现互斥,使得对该共享变量的操作,实现原子性即可。

好了,简洁总结,深刻理解。有不对的地方,欢迎指出,在此谢过。

原文:多线程:(五)多个线程之间共享数据


那时年少轻狂,把喜欢当做筹码,才敢肆无忌惮的任性。
----那时年少轻狂

點(diǎn)擊查看更多內(nèi)容
2人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

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

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

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

立即參與 放棄機(jī)會(huì)
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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

舉報(bào)

0/150
提交
取消