java的wait方法和notify還有notifyAll方法

    最近想寫一個音樂的播放器,所以就使用這個java語言進行書寫。我是使用一個線程對這個音樂進行播放的,但是當我寫到這個音樂的暫停的時候,我想使用這個線程的掛起的方法進行操作,但是我當時學習java的時候對這個線程就是沒有多麼的理解,只能是隨時使用隨時進行查詢了。下面是記錄我的心路歷程啊。

        首先是我假如你是學習過操作系統的,因爲這個樣子你就可以理解這個線程和進程的區別了,其實舉個例子就是這樣子的:不知道你仔細的觀察過繩子沒有,每一個繩子都是有幾股細細的繩子擰成的,那個細細的繩子又是更加的細細的繩子擰成的。所以可以把那寫的細細的繩子可以看做線程或者是進程。在這兒我不想過多的討論這個線程和進程的區別。

        首先假如你的線程都是已經在操作系統的等待池子中,之後就是等待操作系統的臨幸了。首先是將一下這個對象鎖 的問題。所謂對象鎖就是一個對象有一個鎖,就像廁所一樣子,每一個廁所就只有一個坑吧,所以當你拿到這個對象的鎖之後,別的想使用這個鎖的只能等待,就好像這個廁所你已經使用了,你一定是把這個廁所上鎖了,如果你做過火車,那麼你的理解就會更加的深刻了。記住一個對象只用一個鎖。其實提供這個鎖的機制是爲了同步的概念,因爲假如說你產生一個對象了,這個對象是有自己的屬性數據的,類的方法也是對這個數據進行操作的,如果你不需要同步的概念的,那麼你就可以隨便的使用這個方法對這個對象進行操作。但是當你需要同步的時候,你就要使用這個同步的概念了,怎麼纔可以說明是同步的,就是使用synchronized關鍵字,這個關鍵字可以使用一個方法,也可以使用一個語句塊。

        下面,我們主要將一下這個wait方法和notifyAll方法的原理,當一個線程使用一個對象(注意是一個對象啊,如果對象不是一樣子的,那麼他們的鎖也是不一樣子的)的synchronized方法或者是語句的時候,就會得到這個對象的鎖,別人在想使用這個synchronized方法或者是語句都是不行的(但是,其他的不是synchronized方法或者語句的時候是沒有任何的限制的)。他只有等待啊,就像你在火車的廁所的外面,當你看到這個標誌是有人的時候,你只有看一眼,看一眼還是看一眼,只有裏面的那個人出來之後,你才能進去,所所以,想使用這個特synchronized方法或者語句的只能等待等待。等待別人徹底的使用完。讓一個線程(我們總是提到線程的問題,如果你只有一個主線程的話,那麼你酒基本使用不到這個wait方法或者是語句。)讓出來這個鎖有兩個辦法,一個是:自己使用完了,第二:就是自己沒有使用完,但是自己調用了這個對象(就是擁有鎖的對象,以前的我一直以爲是線程,其實不是,就像擁有鎖的是廁所不是人)wait方法,自己讓出來了,讓別人執行一會兒。但是當一個線程讓出來鎖的時候,你必須同志等待的人們,這樣子就會有一個線程進入擁有這個鎖了。之後就是前面的循環。

       總體來說java的線程和socket編程纔是最難的。所以,這此做一個播放器讓我明白和學習了許多的關於線程的知識,學習操作系統果然是有用的啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章