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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线程之线程共享成员变量的几种情况

發布時間:2025/5/22 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程之线程共享成员变量的几种情况 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
public class ThreadScopeMultiShareData {

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



/*
* 如果每個線程執行的代碼一樣,可以使用同一個runnable對象,這個共享數據就可以放在runnable中,例如賣票系統
* 如下例
*/
// public static void main(String[] args) {
//
// Ticket ticket = new Ticket();
// new Thread(ticket).start();
// new Thread(ticket).start();
//
// }
//
//}
// class Ticket implements Runnable{
//
// private int ticketNum = 100;
// public void run() {
//
// while(true){
// ticketNum --;
// System.out.println("the rest of ticket num is : " + ticketNum);
// try {
// Thread.sleep(100);
// } catch (InterruptedException e) {
//// TODO Auto-generated catch block
// e.printStackTrace();
// }
// if(ticketNum<1){
// break;
// }
// }
//
//
// }



/*
* 如果每個線程執行的代碼不一樣,比如一個(run方法)要求加上1,一個(run方法)要求減去1
* 這就要有兩個run方法,也就是有兩個Runnable
* 如下例
*/
// public static void main(String[] args){
// final NumTest numTest = new NumTest();
// new Thread(new Runnable() {
//
// @Override
// public void run() {
// numTest.increment();
//
// }
// }).start();
// new Thread(new Runnable() {
//
// @Override
// public void run() {
// numTest.decrement();
// }
// }).start();
// }
// }
//
// class NumTest{
// private int num = 6;
// public void increment(){
// while(true){
// num++;
// System.out.println(num);
// try {
// Thread.sleep(100);
// } catch (InterruptedException e) {
//// TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
// }
// public void decrement(){
// while(true){
// num--;
// System.out.println(num);
// try {
// Thread.sleep(100);
// } catch (InterruptedException e) {
//// TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
// }

/*
* 上面的例子是把需求體現了,但是有些復雜,優化后的實例如下
* 這就是實現了把共享數據num及其方法封裝在另外的一個對象NumTest中,
* 然后把這個對象逐一傳遞給各個runnable對象,
* 這樣的好處是容易實現對該數據進行各個數據操作之間的互斥和通信
*/

// public static void main(String[] args) {
// final NumTest numTest = new NumTest();
// new Thread(new IncrementRunnable(numTest)).start();
// new Thread(new DecrementRunnable(numTest)).start();
// }
//}
// class IncrementRunnable implements Runnable{
// private NumTest numTest;
// public IncrementRunnable(NumTest numTest) {
// this.numTest = numTest;
// }
// public void run() {
// numTest.increment();
// }
// }
// class DecrementRunnable implements Runnable{
// private NumTest numTest;
// public DecrementRunnable(NumTest numTest){
// this.numTest = numTest;
// }
// public void run() {
// numTest.decrement();
// }
// }
// class NumTest{
// private int num = 6;
// public void increment(){
// num ++;
// System.out.println(num);
// }
// public void decrement(){
// num --;
// System.out.println(num);
// }
// }

}
/*
* 將runnable對象作為一個類的內部類,共享數據作為這個外部的類的成員變量,
* 每個線程對共享數據的操作方法也分配給外部類,
* 作為外部類的各個runnable對象調用調用外部類的這些方法
* 這也能很好的是想互斥和通信
* (這和上例的第一種情況幾乎相似,就是成員變量和局部變量的區別)
*/

//java提供Atomic類能幫助我們解決一些多線程共享數據的問題,詳情查看文檔

?

轉載于:https://www.cnblogs.com/1350995917ding/archive/2011/09/23/2185999.html

總結

以上是生活随笔為你收集整理的线程之线程共享成员变量的几种情况的全部內容,希望文章能夠幫你解決所遇到的問題。

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