Thread各方法適用情況

2021-08-29 07:44:59 字數 1750 閱讀 9070

try  catch (interruptedexception e)
systemclock.sleep(2000);
sleep()方法會使執行緒睡眠,交出cpu給其他執行緒使用。

注意:sleep()方法不會釋放鎖。

上述第二個方法為android獨有,兩者的區別就為是否catch interruptedexception,欲知該異常的作用,請見interrupt()方法。先說結果,該方法遮蔽了interrupt通知。

thread thread = new thread() 

try catch (interruptedexception e) }}

};thread.start();

systemclock.sleep(1000);

thread.interrupt();

了解interrupt()之前,我們先講一下被棄用的stop()方法。

stop()方法呼叫後會立即結束執行緒,而不管執行緒此時在做何事情。這就會引發不可預知的問題,假如執行緒正在對乙個int型變數賦值,剛寫完高位位址準備寫低位位址,此時stop()方法來了,執行緒停止,那這個變數的值可就天知道了。

所以,請使用interrupt()方法代替stop()方法。

interrupt()方法不會立即結束執行緒,而會通知執行緒「你需要中斷了」,那麼執行緒接收到中斷通知後,什麼時候執行呢?有三種情況:

thread.interrupted()

interrupted()方法會攔截該通知,讓使用者進行一系列收尾工作。

interruptedexception

還記得上面sleep()方法中的異常嗎?就是這個貨。這貨會在執行緒是空閒的情況下攔截該通知並進行收尾工作,畢竟執行緒空閒著,也不會搞事情。

注意:這可不是報錯,並不是所有的異常都是錯誤資訊。

執行緒:「哦,我接收到了」,然後就沒有然後了。

private synchronized void initstring() 

private synchronized void printstring() catch (interruptedexception e)

}system.out.println("string: " + sharedstring);

}

當執行緒執行wait()後,執行緒會釋放鎖,並進入到阻塞。

當收到notify()方法後,該執行緒會等待獲取鎖,獲取鎖後則會執行wait()之後的**段

當有多個執行緒(同乙個鎖)進入wait()時,notify()只會通知乙個執行緒,其他執行緒繼續wait()。要想通知所有執行緒,需使用notifyall()。

wait()方法會釋放鎖。

假設有兩個執行緒thread1和thread2,在thread1中呼叫thread2.join(),則會讓thread1阻塞,開始執行thread2,只有當thread2結束後,才會繼續執行。

可以簡單的概括為,join()方法讓執行緒序列執行。

join()內部呼叫了wait()方法,所以會釋放鎖。

該方法很少用到,它會讓執行緒停一下,對,就是停一下。然後讓同優先順序的執行緒工作一下。

STL容器的適用情況

一 各種容器的特性 vector 典型的序列容器,c 標準嚴格要求次容器的實現記憶體必須是連續的,唯一可以和標準c相容的stl容器,任意元素的讀取 修改具有常數時間複雜度,在序列尾部進行插入 刪除是常數時間複雜度,但在序列的頭部插入 刪除的時間複雜度是o n 可以 在任何位置插入新元素,有隨機訪問功...

C STL容器適用情況的說明

各種容器的特性 vector 典型的序列容器,c 標準嚴格要求次容器的實現記憶體必須是連續的,唯一可以和標準 c相容的 stl容器,任意元素的讀取 修改具有常數時間複雜度,在序列尾部進行插入 刪除是常數時間複雜度,但在序列的頭部插入 刪除的時間複雜度是 o n 可以在任何位置插入新元素,有隨機訪問功...

Mysql幾種索引型別的區別及適用情況詳細說明

mysql目前主要有以下幾種索引型別 fulltext,hash,btree,rtree。fulltext 即為全文索引,目前只有 myisam 引擎支援。其可以在create table alter table create index 使用,不過目前只有 char varchar text 列上...