色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > Java中線程的同步(三)

Java中線程的同步(三) 時間:2018-09-25      來源:未知

java允許多線程并發控制,當多個線程同時操作一個可共享的資源變量時(如數據的增刪改查), 將會導致數據不準確,相互之間產生沖突,因此加入同步鎖以避免在該線程沒有完成操作之前,被其他線程的調用,從而保證了該變量的唯一性和準確性。

我們來看java中第三種同步的方式,使用可重入的鎖。

package com.farsight.thread3;

import java.util.concurrent.locks.ReentrantLock;

/**

* 封裝賬戶編號,賬戶余額

* @author xj

*

*/

class Account{

// 定義一個可重入的鎖對象

public final ReentrantLock lock = new ReentrantLock();

private String accountNo;

private double balance;

public Account(){

}

public Account(String accountNo, double balance){

this.accountNo = accountNo;

this.balance = balance;

}

public String getAccountNo() {

return accountNo;

}

public void setAccountNo(String accountNo) {

this.accountNo = accountNo;

}

public double getBalance() {

return balance;

}

public void draw(double drawAmount){

// 加鎖

lock.lock();

try{

// 賬戶余額大于取錢的數目

if(balance >= drawAmount){

System.out.println(Thread.currentThread().getName() + "取錢成功! 吐出鈔票: " + drawAmount);

//人為制造cpu調度,使并發產生

try {

Thread.sleep(1);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// 修改余額

balance -= drawAmount;

}

else{

System.out.println(Thread.currentThread().getName() + "取錢失敗!余額不足!");

}

}

finally {

// 釋放鎖

lock.unlock();

}

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result

+ ((accountNo == null) ? 0 : accountNo.hashCode());

long temp;

temp = Double.doubleToLongBits(balance);

result = prime * result + (int) (temp ^ (temp >>> 32));

return result;

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

Account other = (Account) obj;

if (accountNo == null) {

if (other.accountNo != null)

return false;

}

else if (!accountNo.equals(other.accountNo))

return false;

if (Double.doubleToLongBits(balance) != Double

.doubleToLongBits(other.balance))

return false;

return true;

}

}

/**

* 定義一個取錢的線程類,該線程類根據執行賬戶、取錢

* 數量進行取錢操作,余額不足時無法提取現金。

* @author xj

*

*/

class DrawThread extends Thread{

// 定義一個用戶類,取錢數量

private Account account;

private double drawAmount;

public DrawThread(String name, Account account, double drawAmount){

super(name);

this.account = account;

this.drawAmount = drawAmount;

}

public void run(){

account.draw(drawAmount);

}

}

public class ThreadDemon3 {

public static void main(String[] args) {

// 創建一個模擬戶

Account acct = new Account("1234567", 10000);

//模擬兩個線程對同一個賬戶取錢

new DrawThread("甲", acct, 6000).start();

new DrawThread("乙", acct, 5000).start();

}

}

上一篇:Java中線程的同步(二)

下一篇:Linux 設備樹詳解

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 伊人久久大香线蕉AV最新午夜 | 粗大的内捧猛烈进出少妇视频 | 狠狠躁夜夜躁人人爽天天不卡软件 | 在线日韩欧美 | 欧洲美熟女乱AV亚洲一区 | 永久免费av无码不卡在线观看 | 国产亚洲精品久久久久久打不开 | 久久综合av | 国产原创三级 | 秋霞鲁丝片成人无码 | 寂寞少妇饥渴难耐自慰 | 日本无翼乌邪恶大全彩动图手鞠 | 亚洲AV成人片无码网站 | 首页 综合国产 亚洲 丝袜 | 国产在线偷伦视频免费看 | 蜜臀精品国产高清在线观看 | 中文字幕乱偷无码动漫av | 久久久久亚洲精品无码网址蜜桃 | 在线观看免费观看年龄确认18 | 秋霞在线观看片无码免费 | 中文字幕无线码一区2020青青 | 少妇内射高潮福利炮 | 蜜桃视频 精品区 | 四虎影院永久免费观看 | 孕妇仑乱A级毛片免费看 | 在线aⅴ亚洲中文字幕 | 亚洲女毛多水多21p 国产免费999 | 亚洲AV成人一区二区三区天堂 | 老熟女激烈的高潮 | 激情av在线 | 中文字幕欧美久久日高清 | 成人美女黄网站色大免费的 | 国产偷久久一区精品69 | 亚洲AV无码一区二区三区人 | 麻豆成年进入人口 | 视频二区中文字幕 | 麻豆传媒在线播放 | 欧美日韩一区二区在线视频 | 日韩成人无码中文字幕 | 国产最大成人亚洲精品 | 国产网址在线观看 |