国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java多線程編程之訪問共享對(duì)象和數(shù)據(jù)的方法

2019-11-26 15:11:36
字體:
供稿:網(wǎng)友

多個(gè)線程訪問共享對(duì)象和數(shù)據(jù)的方式有兩種情況:
1、每個(gè)線程執(zhí)行的代碼相同,例如,賣票:多個(gè)窗口同時(shí)賣這100張票,這100張票需要多個(gè)線程共享。
2、每個(gè)線程執(zhí)行的代碼不同,例如:設(shè)計(jì)四個(gè)線程,其中兩個(gè)線程每次對(duì)j增加1,另外兩個(gè)線程每次對(duì)j減少1。

a、如果每個(gè)線程執(zhí)行的代碼相同,可以使用同一個(gè)Runnable對(duì)象,這個(gè)對(duì)象中有共享數(shù)據(jù)。賣票就可以這樣做,每個(gè)窗口都在做賣票任務(wù),賣的票都是同一個(gè)數(shù)據(jù)(點(diǎn)擊查看具體案例)。

b、如果每個(gè)線程執(zhí)行的代碼不同,就需要使用不同的Runnable對(duì)象,有兩種方式實(shí)現(xiàn)Runnable對(duì)象之間的數(shù)據(jù)共享:
1)、將共享數(shù)據(jù)單獨(dú)封裝到一個(gè)對(duì)象中,同時(shí)在對(duì)象中提供操作這些共享數(shù)據(jù)的方法,可以方便實(shí)現(xiàn)對(duì)共享數(shù)據(jù)各項(xiàng)操作的互斥和通信。
2、)將各個(gè)Runnable對(duì)象作為某個(gè)類的內(nèi)部類,共享數(shù)據(jù)作為外部類的成員變量,對(duì)共享數(shù)據(jù)的操作方法也在外部類中提供,以便實(shí)現(xiàn)互斥和通信,內(nèi)部類的Runnable對(duì)象調(diào)用外部類中操作共享數(shù)據(jù)的方法即可。

package com.ljq.test.thread; /** * 多個(gè)線程之間共享數(shù)據(jù)的方式 * * 設(shè)計(jì)四個(gè)線程,其中兩個(gè)線程每次對(duì)j增加1,另外兩個(gè)線程每次對(duì)j減少1。循環(huán)100次。 * * @author Administrator * */public class MultiThreadShareData {  private static ShareData data1 = new ShareData();   public static void main(String[] args) {    ShareData data2 = new ShareData();    new Thread(new DecrementRunnable(data2)).start();    new Thread(new IncrementRunnable(data2)).start();     final ShareData data1 = new ShareData();    new Thread(new Runnable() {      @Override      public void run() {        data1.decrement();       }    }).start();    new Thread(new Runnable() {      @Override      public void run() {        data1.increment();       }    }).start();   } } /** * 創(chuàng)建線程類,負(fù)責(zé)對(duì)j減少1 * * @author Administrator * */class DecrementRunnable implements Runnable {  private ShareData data;   public DecrementRunnable(ShareData data) {    this.data = data;  }   public void run() {    for(int i=0; i<100; i++){      data.decrement();    }       }} /** * 創(chuàng)建線程類,負(fù)責(zé)對(duì)j增加1 * * @author Administrator * */class IncrementRunnable implements Runnable {  private ShareData data;   public IncrementRunnable(ShareData data) {    this.data = data;  }   public void run() {    for(int i=0; i<100; i++){      data.increment();    }       }} /** * 封裝共享數(shù)據(jù) * * @author Administrator * */class ShareData {  private int j = 0;   /**   * 每次對(duì)j增加1   */  public synchronized void increment() {    j++;    System.out.println("j++="+j);  }   /**   * 每次對(duì)j減少1   */  public synchronized void decrement() {    j--;    System.out.println("j--="+j);  }      }

注意:要同步互斥的幾段代碼最好分別放在幾個(gè)獨(dú)立的方法中,這些方法再放在同一個(gè)類中,這樣比較容易實(shí)現(xiàn)它們之間的同步互斥和通信。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泰州市| 江安县| 都江堰市| 米林县| 搜索| 遂宁市| 平昌县| 安庆市| 忻州市| 宝应县| 治县。| 潮州市| 城市| 通辽市| 安溪县| 河津市| 印江| 浪卡子县| 焦作市| 岱山县| 平陆县| 威远县| 鸡东县| 舞钢市| 西城区| 阳城县| 公安县| 剑河县| 迭部县| 安乡县| 清涧县| 南开区| 荣成市| 牟定县| 三穗县| 常山县| 自治县| 合山市| 台中市| 偃师市| 辉县市|