亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

多線程:(五)多個線程之間共享數據

標簽:
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的线程操作)在执行时,直接调用该类中的处理逻辑。这样做,更符合面向对象,更易于维护。

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

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

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


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

點擊查看更多內容
2人點贊

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

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
18
獲贊與收藏
71

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

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

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消