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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java 多线程 事件_java 多线程-线程不安全案例

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 多线程 事件_java 多线程-线程不安全案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

搶票案例:

public class n {

public static void main(String[]args) throws InterruptedException

{

web wb=new web();

new Thread(wb,"a").start();

new Thread(wb,"b").start();

new Thread(wb,"c").start();

}

}

class web implements Runnable{

int num=10;

private boolean flag=true;

public void run()

{

while(flag)

{

test();

}

}

public void test()

{ if(num<0)

{

flag=false;

return;

}

try {

Thread.sleep(200);

}catch(InterruptedException e)

{

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName()+"-->"+num--);

//線程不安全,可能都都是同一張票,可能票是負數

//負數:當還有1張票時,三個線程同時進入,都等待后,有兩個線程為負數

//相同票:線程有自己的工作臺,多個線程幾乎同時到達,拷貝數據

}

}

賬戶存取款案例:

當類繼承了Thread,構造時super(String name)可以設置線程名字

取錢:

只剩一張錢,多個線程取同一張錢

多個線程同時抵達,一個存一張錢,一個取一張錢,導致個人賬戶錢不變

public class el {

public static void main(String[]args)

{

account a=new account(100,"me");

get g=new get(a,80,"she");

get g2=new get(a,90,"he");

g.start();

g2.start();

}

}

//賬戶

class account {

int money;

String name;

public account(int money,String name)

{

this.money=money;

this.name=name;

}

}

//模擬取款

class get extends Thread

{

account a; //取錢的賬戶

int getmoney; //單個人取的錢數

int getall; //多個人取的總數

public get (account a,int getmoney,String name)

{

super(name);//Thread可以設置name

this.a=a;

this.getmoney=getmoney;

}

public void run()

{

if(a.money-getmoney<0) //添加也沒用

{

return;

}

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

a.money-=getmoney;

getall+=getmoney;

System.out.println(this.getName()+"-->賬戶余額為:"+a.money);

System.out.println(this.getName()+"-->取錢總數為:"+getall);

}

}

操作容器案例:

可能會有容器元素被覆蓋,多個線程同時進入一個位置

public class h {

public static void main(String[]args)

{

List list=new ArrayList();

for(int i=0;i<10000;i++)

{

new Thread(()->

{list.add(Thread.currentThread().getName());}

).start();

}

System.out.println(list.size());

}

}

總結

以上是生活随笔為你收集整理的java 多线程 事件_java 多线程-线程不安全案例的全部內容,希望文章能夠幫你解決所遇到的問題。

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