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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux多线程访问共享资源,多个线程访问共享对象和数据

發(fā)布時間:2024/9/27 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux多线程访问共享资源,多个线程访问共享对象和数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

多個線程訪問共享對象和數(shù)據(jù)有很多方式,但是可以分為兩大類:1.多線程執(zhí)行代碼相同的。2.多線程執(zhí)行代碼不同的

對于多線程執(zhí)行代碼相同的情況來說:

1)使用同一個Runnable對象,在new Thread的時候放入相同的這個對象

public?static?void?main(String[]?args)?{

Runnable?r?=?new?Runnable()?{

int?num?=?100;

@Override

public?synchronized?void?run()?{

System.out.println(++num?+?"==add");

}

};

Thread?t1?=?new?Thread(r);

Thread?t2?=?new?Thread(r);

Thread?t3?=?new?Thread(r);

t1.start();

t2.start();

t3.start();

}

對于多線程代碼不同的情況來說:

1)將需要共享的對象或者數(shù)據(jù)放入另一個對象中,這個對象對外提供對其操作的方法,由不同的線程調(diào)用。

class?Number?{

int?num?=?100;

public?int?add()?{

return?++num;

}

public?int?del()?{

return?--num;

}

}

Runnable對象中使用同一個Number對象

public?static?void?main(String[]?args)?{

final?Number?num?=?new?Number();

Runnable?rAdd?=?new?Runnable()?{

@Override

public?synchronized?void?run()?{

System.out.println(num.add()?+?"==add");

}

};

Runnable?rDel?=?new?Runnable()?{

@Override

public?synchronized?void?run()?{

System.out.println(num.del()?+?"==del");

}

};

Thread?t1?=?new?Thread(rAdd);

Thread?t2?=?new?Thread(rDel);

Thread?t3?=?new?Thread(rAdd);

t1.start();

t2.start();

t3.start();

}

2)將Runnable寫成內(nèi)部類的形式,然后將需要共享的對象和數(shù)據(jù)寫成外部類的成員變量。

class?Number{

int?num?=?100;

Runnable?r_add?=?new?Runnable()?{

@Override

public?synchronized?void?run()?{

System.out.println(++num+"==add");

}

};

Runnable?r_del?=?new?Runnable()?{

@Override

public?synchronized?void??run()?{

System.out.println(--num+"==del");

}

};

}

然后通過調(diào)用Number對象中的內(nèi)部類對象來實現(xiàn)。

public?static?void?main(String[]?args)?{

Number?n?=?new?Number();

Thread?t1?=?new?Thread(n.r_add);

Thread?t2?=?new?Thread(n.r_del);

t1.start();

t2.start();

}

------------------------------------------------------------------------------

還有一種方法簡單粗暴,就是把需要共享的對象和數(shù)據(jù)用static修飾。

總結(jié)

以上是生活随笔為你收集整理的linux多线程访问共享资源,多个线程访问共享对象和数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。