电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

菜鳥初學Java的備忘錄(七)

瀏覽:3日期:2024-06-25 08:20:20
內容: 我突然發現還有很多東西需要我弄明白,比如synchronized這個關鍵字的用法.因為在我昨天進行創建連接池套接字的研究的時候,發現假如我不弄清楚這個概念,根本就無法進行下去,所以我決定將自己對Socket的興趣先冷卻一下,而回過頭來看synchronized.看了一上午的Think in Java,覺得還是卓有成效的,應該立即寫下來加深印象.我感覺自己的大腦可重用性極低,總是需要生成新的記憶對象,從而耗費許多重復勞動.所以象記錄,分析,總結這樣類似的工作應該多多益善.要弄清synchronized的用法,首先要知道它是用來解決什么問題的.既然synchronized是同步的意思,那么它當然就是來解決不同步的問題的.下面就舉一個不同步的例子來演示可能出現的問題.在這個例子當中,我們會創建兩個線程類.一個叫TwoCounter,其工作是對兩個計數器變量同時進行累加,從1開始,你馬上會想道,我們是要用它來實現一個同步.另一個對象叫Watcher,顧名思義,是用來做監視工作的,它負責檢查TwoCounter線程中的兩個計數器的值是否相等,看起來這似乎是毫無意義的工作,因為既然是同步累加的,那么兩個計數器的值怎么可能不相等呢??但,事實情況不是這樣的.我們先來看程序.在看這個程序之前,最好先翻翻Think in Java的14.2.1,我的程序實際上是根據該節中給出的例子簡化的,其中的主類改作了Sharing2class TwoCounter extends Thread { private int count1 = 0, count2 = 0; private boolean started=false; public void start(){ if (!started) file://防止多次對一個線程調用Start方法 { started=true; super.start(); } } public void run() { while (true) { count1++;file://如果TwoCounter運行到這個時候,CPU時間片被分配給了Watcher,那么這個時候Watcher讀出來的兩個計數器的值當然會不一樣了,這個可能性是存在的。“這是由線程的本質造成的——它們可在任何時候掛起(暫停)。所以在上述兩行的執行時刻之間,有時會出現執行暫停現象。同時,Watcher線程也正好跟隨著進來,并正好在這個時候進行比較,造成計數器出現不相等的情況.(Think in Java) count2++; System.out.println('Count1='+count1+',Count2='+count2); try { sleep(500); } catch (InterruptedException e){} } } public void synchTest() { Sharing2.incrementAccess(); if(count1 != count2) System.out.println('Unsynched');//一旦發現不同步,立即顯示 }}class Watcher extends Thread { private Sharing2 p; public Watcher(Sharing2 p) { this.p = p; start(); } public void run() { while(true) { p.s.synchTest(); try { sleep(500); } catch (InterruptedException e){} } }}public class Sharing2 { TwoCounter s; private static int accessCount = 0; public static void incrementAccess() { accessCount++; System.out.println('accessCount='+accessCount); } public static void main(String[] args) { Sharing2 aaa = new Sharing2(); aaa.s=new TwoCounter(); aaa.s.start();//打開TwoCounter線程 new Watcher(aaa);//打開Watcher線程 }} 上面的注釋講得很清楚了,有可能出現不同步的情況.但奇怪的是,我在運行的時候,卻始終沒有遇到不同步的情況,那么只有一種情況,就是程序中count1++和count2++幾乎是同時進行的,watcher線程插不進來,但是為什么Think in Java上面的程序運行之后就肯定有不同步的情況呢?兩個程序的原理是完全一樣的,唯一不同的是我的程序較為簡單,并且在命令行下運行,未使用GUI.難道是因為使用Applet方式運行或者以Windows主窗口的方式運行開銷更大,使得watcher有機可趁嗎?于是我試著在count1++和count2++之間加了一條循環語句,人為的增大空隙,目的是為了讓watcher好插進來,造成監測出來的count1不等于count2的情況,實現不同步.修改后的程序是這樣的 ...... count1++; for(int i=0;i
標簽: Java
相關文章:
主站蜘蛛池模板: 软文世界-软文推广-软文营销-新闻稿发布-一站式软文自助发稿平台 | 软装设计-提供软装装饰和软装配饰及软装陈设的软装设计公司 | 欧景装饰设计工程有限公司-无锡欧景装饰官网| 山东钢格板|栅格板生产厂家供应商-日照森亿钢格板有限公司 | 光谱仪_积分球_分布光度计_灯具检测生产厂家_杭州松朗光电【官网】 | 沈阳缠绕包装机厂家直销-沈阳海鹞托盘缠绕包装机价格 | 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 生态板-实木生态板-生态板厂家-源木原作生态板品牌-深圳市方舟木业有限公司 | 北京浩云律师事务所-企业法律顾问_破产清算等公司法律服务 | 找培训机构_找学习课程_励普教育 | 一路商机网-品牌招商加盟优选平台-加盟店排行榜平台 | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 | 淘趣英语网 - 在线英语学习,零基础英语学习网站 | 压力喷雾干燥机,喷雾干燥设备,柱塞隔膜泵-无锡市闻华干燥设备有限公司 | 穿线管|波纹穿线管|包塑金属软管|蛇皮管?闵彬专注弱电工程? | 春腾云财 - 为企业提供专业财税咨询、代理记账服务 | 海水晶,海水素,海水晶价格-潍坊滨海经济开发区强隆海水晶厂 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 旗杆生产厂家_不锈钢锥形旗杆价格_铝合金电动旗杆-上海锥升金属科技有限公司 | 河南生物显微镜,全自动冰冻切片机-河南荣程联合科技有限公司 | 渣油泵,KCB齿轮泵,不锈钢齿轮泵,重油泵,煤焦油泵,泊头市泰邦泵阀制造有限公司 | 抖音短视频运营_企业网站建设_网络推广_全网自媒体营销-东莞市凌天信息科技有限公司 | 石英陶瓷,石英坩埚,二氧化硅陶瓷-淄博百特高新材料有限公司 | 阴离子聚丙烯酰胺价格_PAM_高分子聚丙烯酰胺厂家-河南泰航净水材料有限公司 | 泰安办公家具-泰安派格办公用品有限公司 | pH污水传感器电极,溶解氧电极传感器-上海科蓝仪表科技有限公司 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | POS机官网 - 拉卡拉POS机免费办理|官网在线申请入口 | 进口便携式天平,外校_十万分之一分析天平,奥豪斯工业台秤,V2000防水秤-重庆珂偌德科技有限公司(www.crdkj.com) | 流程管理|流程管理软件|企业流程管理|微宏科技-AlphaFlow_流程管理系统软件服务商 | 「钾冰晶石」氟铝酸钾_冰晶石_氟铝酸钠「价格用途」-亚铝氟化物厂家 | 深圳法律咨询【24小时在线】深圳律师咨询免费 | 水平垂直燃烧试验仪-灼热丝试验仪-漏电起痕试验仪-针焰试验仪-塑料材料燃烧检测设备-IP防水试验机 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 衢州装饰公司|装潢公司|办公楼装修|排屋装修|别墅装修-衢州佳盛装饰 | 儿童乐园|游乐场|淘气堡招商加盟|室内儿童游乐园配套设备|生产厂家|开心哈乐儿童乐园 | 电池高低温试验箱-气态冲击箱-双层电池防爆箱|简户百科 | 岩棉切条机厂家_玻璃棉裁条机_水泥基保温板设备-廊坊鹏恒机械 | 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 |