兩個線程對一個變量進(jìn)行操作,但是沒有上鎖,即沒有進(jìn)行同步操作,就像買車票的時候多個窗口一起賣,但是車票數(shù)沒有減去。車票被重復(fù)賣出。就是不安全。還有,被多個線程操作的變量改為靜態(tài)量加static,才安全

創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、五寨網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場景定制、成都商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為五寨等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
如果你的代碼所在的進(jìn)程中有多個線程在同時運(yùn)行,而這些線程可能會同時運(yùn)行這段代碼。如果每次運(yùn)行結(jié)果和單線程運(yùn)行的結(jié)果是一樣的,而且其他的變量的值也和預(yù)期的是一樣的,就是線程安全的。
或者說:一個類或者程序所提供的接口對于線程來說是原子操作或者多個線程之間的切換不會導(dǎo)致該接口的執(zhí)行結(jié)果存在二義性,也就是說我們不用考慮同步的問題。
線程安全問題都是由全局變量及靜態(tài)變量引起的。
若每個線程中對全局變量、靜態(tài)變量只有讀操作,而無寫操作,一般來說,這個全局變量是線程安全的;若有多個線程同時執(zhí)行寫操作,一般都需要考慮線程同步,否則就可能影響線程安全。
假如一個變量在兩個線程中都同時使用,如果一個線程正在操作這個變量的時候突然這個線程進(jìn)入等待狀態(tài),被另一個線程搶了,另一個線程也在操作這個變量,就會發(fā)生一些不想出現(xiàn)的結(jié)果,所以有些線程要確保安全需要加上鎖,同步塊什么的
//銀行卡類
public class BanCard {
private Double money = 5000d;
public synchronized void drawMoney(double howMoney,String threadName){
try {
System.out.println(threadName+"進(jìn)入取錢操作!");
Thread.sleep(2000);//為了提前是一次只有一個線程進(jìn)入此方法,進(jìn)行了睡眠2秒
if(howMoneymoney){
System.out.println(threadName+"余額不足!");
return;
}
this.money-=howMoney;
System.out.println(threadName+"-原始余額:"+this.money+",取錢"+howMoney+"后,還剩余額"+this.money);
System.out.println(threadName+"結(jié)束取錢操作!");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//線程類
public class ThreadDemo implements Runnable {
private BanCard banCard = new BanCard();
private double howMoney=0d;
public void run() {
banCard.drawMoney(this.howMoney,Thread.currentThread().getName());
}
public double getHowMoney() {
return howMoney;
}
public void setHowMoney(double howMoney) {
this.howMoney = howMoney;
}
}
//main所在類
public class Test1 {
public static void main(String[] args) {
ThreadDemo threadDemo = new ThreadDemo();
threadDemo.setHowMoney(3000d);//取款3000
Thread thread1 = new Thread(threadDemo);
thread1.start();
threadDemo.setHowMoney(4000d);//取款4000
Thread thread2 = new Thread(threadDemo);
thread2.start();
}
}
當(dāng)前標(biāo)題:線程不安全的java代碼,java線程不安全會造成什么
文章位置:http://chinadenli.net/article22/dsgpocc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站設(shè)計、關(guān)鍵詞優(yōu)化、網(wǎng)頁設(shè)計公司、搜索引擎優(yōu)化、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)