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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java 停止for_java线程for循环没有循环完成就停止了,这是为什么?

發(fā)布時間:2024/1/23 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 停止for_java线程for循环没有循环完成就停止了,这是为什么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

你 根據 多線程 和 鎖 的 執(zhí)行 過程 分析 代碼。理論要先學好。

1、多線程

各線程自己同時運行(cpu太快,你可以理解為同時),各不相干。但遇到多線程同時修改同一變量,會發(fā)生并發(fā)問題。為什么,深層是計算機內存原理,JMM原理。為了解決這問題,所以用鎖。

2、鎖

單線程是安全的。代碼加鎖了以后,線程想要執(zhí)行代碼,就要獲取鎖,代碼執(zhí)行完,鎖釋放。

鎖分很多種。可以根據用途特性分為幾個類型。

樂觀鎖 和 悲觀鎖。

共享鎖 和 排他鎖。(讀寫鎖:讀鎖,設計為共享鎖,同時讀,效率高,線程不等待。寫鎖,只能一個線程操作,代碼變?yōu)閱尉€程順序執(zhí)行。保證變量安全。所以一般都是排他鎖。)

公平鎖 和 非公平鎖。公平:多個線程之間順序輪流拿鎖,每人排隊拿鎖。每人執(zhí)行同樣的次數,每個線程都能執(zhí)行,公平,不公平鎖:每次有鎖釋放時,CPU隨機分配一個線程拿鎖。很簡單,那樣有可能一個線程等半天拿不到鎖情況。這就是跟那個故事一樣的道理,就是一個

猴子坐在電腦前,不停的敲鍵盤,只要時間夠長,他可以敲出一部莎士比亞小說集。

可重入鎖 和 不可重入鎖。大部分都是可重入鎖。

sychronized 是 排他鎖,悲觀鎖,不公平鎖,可重入鎖。

你的2個問題。

1、使用Vector,你2子線程都用list鎖,主線程讀list,就是三個線程都用的list這個對象的對象鎖,就是同一個鎖。

子線程代碼你自己看,循環(huán)是在同步鎖里面的,搶到鎖以后,循環(huán)時不需要搶鎖,因為是可重入鎖,執(zhí)行完,線程就結束了,線程結束了,鎖也釋放了,只要搶1次鎖就結束了。

main主線程,每次循環(huán)調用size()方法搶鎖,執(zhí)行完,釋放鎖,然后get(i)又搶鎖,然后又釋放鎖,循環(huán)1次搶2次鎖。所以搶N次鎖。

2、為什么2子線程用LOCK鎖了,主線程Vector list也打印不全。這很簡單啊。此時主線程用list鎖,和子線程的大鎖LOCK不是同一個鎖,但是和子線程里的add是同一把鎖,都是對象鎖list。

這樣子,2子線程和main主線程要搶鎖。但是代碼你看。這時候子線程要等1毫秒的。主線程1秒后啟動,此時大概有900個數據進list了。主線程也要開始搶鎖了,但是2個子線程都在睡眠中。(為啥都在睡眠中,請仔細思考這里),

主線程每次循環(huán)搶2次鎖,沒人和它搶了,他就把900個數據打印完了,主線程結束了。后面子線程繼續(xù)往list中加完數據才結束。(自己思考)。2張圖看你自己的代碼。另外,一口吃不成胖子。搞編程的需要時間,因為大部分人沒有那么高的智商。

總結

以上是生活随笔為你收集整理的java 停止for_java线程for循环没有循环完成就停止了,这是为什么?的全部內容,希望文章能夠幫你解決所遇到的問題。

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