日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 多线程共享数据_Java多线程学习:多个线程间共享数据

發布時間:2025/4/5 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 多线程共享数据_Java多线程学习:多个线程间共享数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多個線程訪問共享對象和數據的方式有兩種情況:

1、每個線程執行的代碼相同,例如,賣票:多個窗口同時賣這100張票,這100張票需要多個線程共享。

2、每個線程執行的代碼不同,例如:設計四個線程,其中兩個線程每次對j增加1,另外兩個線程每次對j減少1。

a、如果每個線程執行的代碼相同,可以使用同一個Runnable對象,這個對象中有共享數據(靜態變量)。賣票就可以這樣做,每個窗口都在做賣票任務,賣的票都是同一個數據(點擊查看具體案例)。

b、如果每個線程執行的代碼不同,就需要使用不同的Runnable對象,有兩種方式實現Runnable對象之間的數據共享:

1)、將共享數據單獨封裝到一個對象中,同時在對象中提供操作這些共享數據的方法,可以方便實現對共享數據各項操作的互斥和通信。

2、)將各個Runnable對象作為某個類的內部類,共享數據作為外部類的成員變量,對共享數據的操作方法也在外部類中提供,以便實現互斥和通信,內部類的Runnable對象調用外部類中操作共享數據的方法即可。

package com.ljq.test.thread;

/**

* 多個線程之間共享數據的方式

*

* 設計四個線程,其中兩個線程每次對j增加1,另外兩個線程每次對j減少1。循環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();

}

}

/**

* 創建線程類,負責對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();

}

}

}

/**

* 創建線程類,負責對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();

}

}

}

/**

* 封裝共享數據

*

* @author Administrator

*

*/

class ShareData {

private int j = 0;

/**

* 每次對j增加1

*/

public synchronized void increment() {

j++;

System.out.println("j++="+j);

}

/**

* 每次對j減少1

*/

public synchronized void decrement() {

j--;

System.out.println("j--="+j);

}

}

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

推薦閱讀:

總結

以上是生活随笔為你收集整理的java 多线程共享数据_Java多线程学习:多个线程间共享数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。