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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

201771010112罗松《面向对象程序设计(java)》第十七周学习总结

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 201771010112罗松《面向对象程序设计(java)》第十七周学习总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、實驗目的與要求

(1)?掌握線程同步的概念及實現技術;?

(2)?線程綜合編程練習

2、實驗內容和步驟

實驗1:測試程序并進行代碼注釋。

測試程序1:

l?在Elipse環境下調試教材651頁程序14-7,結合程序運行結果理解程序;

l?掌握利用鎖對象和條件對象實現的多線程同步技術。

package synch;/*** This program shows how multiple threads can safely access a data structure.* * @version 1.31 2015-06-21* @author Cay Horstmann*/ public class SynchBankTest {public static final int NACCOUNTS = 100;public static final double INITIAL_BALANCE = 1000;public static final double MAX_AMOUNT = 1000;public static final int DELAY = 10;public static void main(String[] args) {Bank bank = new Bank(NACCOUNTS, INITIAL_BALANCE);for (int i = 0; i < NACCOUNTS; i++) {int fromAccount = i;Runnable r = () -> {try {while (true) {int toAccount = (int) (bank.size() * Math.random());double amount = MAX_AMOUNT * Math.random();bank.transfer(fromAccount, toAccount, amount);Thread.sleep((int) (DELAY * Math.random()));// 在指定的毫秒數內讓當前正在執行的線程休眠 }} catch (InterruptedException e) {}};Thread t = new Thread(r);// 分配新的 Thread 對象t.start();// 開始線程 }} }SynchBankTest package synch;import java.util.*; import java.util.concurrent.locks.*;/*** A bank with a number of bank accounts that uses locks for serializing access.* * @version 1.30 2004-08-01* @author Cay Horstmann*/ public class Bank {private final double[] accounts;private Lock bankLock;private Condition sufficientFunds;/*** Constructs the bank.* * @param n* the number of accounts* @param initialBalance* the initial balance for each account*/public Bank(int n, double initialBalance) {accounts = new double[n];Arrays.fill(accounts, initialBalance);bankLock = new ReentrantLock();sufficientFunds = bankLock.newCondition();}/*** Transfers money from one account to another.* * @param from* the account to transfer from* @param to* the account to transfer to* @param amount* the amount to transfer*/public void transfer(int from, int to, double amount) throws InterruptedException {bankLock.lock();// 加鎖try {while (accounts[from] < amount)sufficientFunds.await();// 鎖對象的條件對象System.out.print(Thread.currentThread());// 返回對當前正在執行的線程對象的引用accounts[from] -= amount;System.out.printf(" %10.2f from %d to %d", amount, from, to);accounts[to] += amount;System.out.printf(" Total Balance: %10.2f%n", getTotalBalance());sufficientFunds.signalAll();// 喚醒所有等待線程} finally {bankLock.unlock();// 解鎖 }}/*** Gets the sum of all account balances.* * @return the total balance*/public double getTotalBalance() {bankLock.lock();// 加鎖try {double sum = 0;for (double a : accounts)sum += a;return sum;} finally {bankLock.unlock();// 解鎖 }}/*** Gets the number of accounts in the bank.* * @return the number of accounts*/public int size() {return accounts.length;} }Bank

測試程序2:

l?在Elipse環境下調試教材655頁程序14-8,結合程序運行結果理解程序;

l?掌握synchronized在多線程同步中的應用。

package synch2;/*** This program shows how multiple threads can safely access a data structure,* using synchronized methods.* * @version 1.31 2015-06-21* @author Cay Horstmann*/ public class SynchBankTest2 {public static final int NACCOUNTS = 100;public static final double INITIAL_BALANCE = 1000;public static final double MAX_AMOUNT = 1000;public static final int DELAY = 10;public static void main(String[] args) {Bank bank = new Bank(NACCOUNTS, INITIAL_BALANCE);for (int i = 0; i < NACCOUNTS; i++) {int fromAccount = i;Runnable r = () -> {try {while (true) {int toAccount = (int) (bank.size() * Math.random());double amount = MAX_AMOUNT * Math.random();bank.transfer(fromAccount, toAccount, amount);Thread.sleep((int) (DELAY * Math.random()));// 在指定的毫秒數內讓當前正在執行的線程休眠 }} catch (InterruptedException e) {}};Thread t = new Thread(r);// 分配新的 Thread 對象t.start();// 使線程開始執行 }} }SynchBankTest2 package synch2;import java.util.*;/*** A bank with a number of bank accounts that uses synchronization primitives.* * @version 1.30 2004-08-01* @author Cay Horstmann*/ public class Bank {private final double[] accounts;/*** Constructs the bank.* * @param n* the number of accounts* @param initialBalance* the initial balance for each account*/public Bank(int n, double initialBalance) {accounts = new double[n];Arrays.fill(accounts, initialBalance);}/*** Transfers money from one account to another.* * @param from* the account to transfer from* @param to* the account to transfer to* @param amount* the amount to transfer*/public synchronized void transfer(int from, int to, double amount) throws InterruptedException {while (accounts[from] < amount)wait();// 添加一個線程到等待集中System.out.print(Thread.currentThread());// 返回對當前正在執行的線程對象的引用accounts[from] -= amount;System.out.printf(" %10.2f from %d to %d", amount, from, to);accounts[to] += amount;System.out.printf(" Total Balance: %10.2f%n", getTotalBalance());notifyAll();// 解除等待線程的阻塞狀態 }/*** Gets the sum of all account balances.* * @return the total balance*/public synchronized double getTotalBalance() {double sum = 0;for (double a : accounts)sum += a;return sum;}/*** Gets the number of accounts in the bank.* * @return the number of accounts*/public int size() {return accounts.length;} }Bank

測試程序3:

l?在Elipse環境下運行以下程序,結合程序運行結果分析程序存在問題;

l?嘗試解決程序中存在問題。

class?Cbank

{

?????private?static?int?s=2000;

?????public???static?void?sub(int?m)

?????{

???????????int?temp=s;

???????????temp=temp-m;

??????????try?{

??? ??Thread.sleep((int)(1000*Math.random()));

??? }

???????????catch?(InterruptedException?e)??{??????????????}

???? ??????s=temp;

???? ??????System.out.println("s="+s);

?? }

}

?

?

class?Customer?extends?Thread

{

??public?void?run()

??{

???for(?int?i=1;?i<=4;?i++)

?????Cbank.sub(100);

????}

?}

public?class?Thread3

{

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

??{

???Customer?customer1?=?new?Customer();

???Customer?customer2?=?new?Customer();

???customer1.start();

???customer2.start();

??}

}

運行結果:

?

class Cbank {private static int s = 2000;public synchronized static void sub(int m) {int temp = s;temp = temp - m;try {Thread.sleep((int) (1000 * Math.random()));} catch (InterruptedException e) {}s = temp;System.out.println("s=" + s);} }class Customer extends Thread {public void run() {for (int i = 1; i <= 4; i++)Cbank.sub(100);} }public class Thread3 {public static void main(String args[]) {Customer customer1 = new Customer();Customer customer2 = new Customer();customer1.start();customer2.start();} }

實驗2?編程練習

利用多線程及同步方法,編寫一個程序模擬火車票售票系統,共3個窗口,賣10張票,程序輸出結果類似(程序輸出不唯一,可以是其他類似結果)。

Thread-0窗口售:第1張票

Thread-0窗口售:第2張票

Thread-1窗口售:第3張票

Thread-2窗口售:第4張票

Thread-2窗口售:第5張票

Thread-1窗口售:第6張票

Thread-0窗口售:第7張票

Thread-2窗口售:第8張票

Thread-1窗口售:第9張票

Thread-0窗口售:第10張票

public class Demo {public static void main(String[] args) {Mythread mythread = new Mythread();Thread t1 = new Thread(mythread);Thread t2 = new Thread(mythread);Thread t3 = new Thread(mythread);t1.start();t2.start();t3.start();} }class Mythread implements Runnable {int t = 1;boolean flag = true;@Overridepublic void run() {// TODO Auto-generated method stubwhile (flag) {try {Thread.sleep(500);} catch (Exception e) {// TODO: handle exception e.printStackTrace();}synchronized (this) {if (t <= 10) {System.out.println(Thread.currentThread().getName() + "窗口售:第" + t + "張票");t++;}if (t > 10) {flag = false;}}}} }

三、實驗總結:

?

這次實驗比起前幾次來說不算難,完成得也比較輕松,接下來的時間主要是復習之前的知識,為期末考試做準備。

?

轉載于:https://www.cnblogs.com/xuezhiqian/p/10162933.html

總結

以上是生活随笔為你收集整理的201771010112罗松《面向对象程序设计(java)》第十七周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日本 奴役 捆绑 受虐狂xxxx | 青娱乐97 | 国产乱码精品一区二三区蜜臂 | 日本在线观看免费 | 在线播放www| www黄色大片| 国产成人手机在线 | 亚洲专区欧美专区 | 国产精品视频导航 | 公侵犯人妻中文字慕一区二区 | 亚洲看片 | 欧美成人精品在线观看 | 亚洲中文字幕第一区 | 亚洲第一色网站 | 瑟瑟视频在线观看 | 一本色道久久综合亚洲精品酒店 | 玖玖玖国产精品 | 91欧美激情一区二区三区 | 男人在线视频 | 亚洲欧洲日韩国产 | 亚洲欧美成人 | 美女福利一区 | 一本加勒比北条麻妃 | 暖暖免费观看日本版 | 美女福利视频在线观看 | 亚洲精品丝袜 | 国产精品呻吟久久 | 97公开免费视频 | 99热这里只有精品在线观看 | 色精品视频| 99黄色| 97在线观看视频 | 嫩草一二三 | 国产成人91精品 | 少妇高潮21p | 深夜在线免费视频 | 欧美另类人妖 | 男女免费网站 | 人人99| 波多野结衣视频免费在线观看 | 久草欧美| 91精品国产综合久久久久久 | 国产精品久久久久久久久免费软件 | 日韩成人精品一区二区三区 | 成人黄色三级视频 | 国产高清视频在线观看 | 欧美伊人网 | 日韩网站视频 | 秋霞黄色网 | 亚洲欧洲激情 | 免费网站成人 | 国产香蕉97碰碰碰视频在线观看 | 9色视频在线观看 | 久久久一二三四 | 伊人五月天 | 日本久久视频 | 久久人人爽人人 | 狠狠躁夜夜躁av无码中文幕 | 曰女同女同中文字幕 | 国产日产精品一区二区三区四区 | 手机在线观看av | 中文字幕国产日韩 | 极品久久久| 欧美一区二区三区大屁股撅起来 | 玖草在线 | 91超碰人人 | 日本少妇网站 | 喷水少妇 | 国产第一页屁屁影院 | 天天操夜夜爽 | 伊人久久影院 | 99在线精品视频免费观看20 | 91激情 | 欧美亚洲二区 | 91成人在线观看喷潮动漫 | 欧美日本韩国一区二区三区 | 开心激情深爱 | 国产无遮挡又黄又爽在线观看 | 跪求黄色网址 | 蜜臀一区二区三区 | 在线看成人av| 亚洲 精品 综合 精品 自拍 | 日韩欧美一区二区三区在线 | 91精品在线视频观看 | 少妇淫片| 黄色成年人视频 | 黄色免费视频 | 午夜国产在线观看 | 极品国产91在线网站 | 91在线在线| 亚洲热热 | 日韩一区二区不卡 | 中文字幕观看在线 | 天天久| 99riav在线| 极品美妇后花庭翘臀娇吟小说 | 亚洲欧美日韩在线不卡 | 精品亚洲国产成人av制服丝袜 | 亚洲一级一区 |