免费体验120秒视频_榴莲榴莲榴莲榴莲官网_2021国产麻豆剧果冻传媒入口_一二三四视频社区在线
當前位置:首頁文章首頁 IT學院 IT技術

線程中sleep()與wait()區別

作者:  來源:  發布時間:2012-2-16 16:23:51  點擊:

  sleep是讓線程暫停指定的時間,wait是讓線程等待,知道有notify方法出現在繼續運行,sleep不釋放對象鎖,wait釋放對象鎖。這在很多地方都有寫到,但沒有例子不好理解

  import java.util.ArrayList; import java.util.List; public class thread { public List list=new ArrayList(); Integer i=0;//新建一個對象,隨便什么,就為了借用它的鎖而已。 public static void main(String[] args){ thread th=new thread(); A a=th.new A(); B b=th.new B(); Thread add=new Thread(a); Thread get=new Thread(b); add.start(); get.start(); } class A extends Thread{ public void run(){ synchronized(i){ try { //Thread.sleep(1000); i.wait();//這里調用了對象i的wait方法,那么就表示所在線程暫時放棄i的對象鎖,并阻塞在這里,同時把機會讓給同樣使用i鎖的B線程執行 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } for(int j=0;j

  從如上代碼中可見,線程B是負責向集合中加值的,線程A是負責從集合中取值的,如果不進行同步處理,那么如果兩個線程同時運行,那么A可能在B加入值之前就從集合中取值,那么就會報錯,所以必須進行同步代碼的操作(也可以加入flag來判斷是否到了A中從集合里取值的時機)。

  而用sleep就沒有上面的功能了,因為從代碼中可以發現,不管是A線程先搶到cpu開始執行還是B線程先執行,他們中的一個肯定會拿到i的鎖的,但拿到后i的鎖就沒有使用wait方法釋放過,那假設B先拿到鎖了,向list中加入值完成了,那也別指望A能打印出來,因為A一直阻塞在(i){  

上一篇:linux網絡客戶端 下一篇:

相關軟件

相關文章

文章評論

軟件按字母排列: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
免费体验120秒视频_榴莲榴莲榴莲榴莲官网_2021国产麻豆剧果冻传媒入口_一二三四视频社区在线
主站蜘蛛池模板: 啪一啪在线| 久久亚洲精品无码aⅴ大香| avav片在线看| 免费看男女下面日出水视频| 全免费a级毛片免费**视频| 华人生活自拍区杏吧有你| 波多野结衣视频网址| 2022天天躁夜夜躁西| 国产对白真实伦视频在线| 东方aⅴ免费观看久久av| 欧美日韩国产三上悠亚在线看| 乱子伦xxxx| 妞干网最新| 日本插曲的痛的30分钟| 和前辈夫妇交换性3中文字幕| 娇小老少配xxxxx丶| 老阿姨哔哩哔哩b站肉片茄子芒果| 狗奴vk| 天海翼大乱欲在线观看| 一个人看的www在线观看免费| 成人av电影网站| 国产一精品一aⅴ一免费| 91精品国产91久久久久青草| 福利一区三区| 国产精品毛片无遮挡| 日本久热| 人人妻人人玩人人澡人人爽 | 亚洲youjizz| 亚洲美国产亚洲av| 精品无码人妻一区二区三区 | 男人好大好硬好爽免费视频| 韩国v欧美v亚洲v日本v| 色人格第四色| www.天天色.com| 男人j进女人p免费视频| 成人无码av一区二区| 一本久久综合亚洲鲁鲁五月天| 久久国产精品成人片免费| 亚洲午夜无码久久| 18禁裸体动漫美女无遮挡网站 | 在线观看国产福利|