Concurrency

為了提升程序性能,我們可以將任務(wù)分成互相獨立的子任務(wù)并使用多線程來處理。這里提供了詳細的講解,本文是作者的讀書筆記。

線程的生命周期:New, Waiting, Running, Dead等。

線程具有優(yōu)先級,從MIN_PRIORITY(1)到MAX_PRIORITY(10),線程的默認優(yōu)先級為NORM_PRIORITY(5),優(yōu)先級越高,越容易被執(zhí)行。

有兩種方式來創(chuàng)建thread,by implementing Runnable Interface, by extending Thread class。

Implementing Runnable Interface

1. 創(chuàng)建實現(xiàn)Runnable接口的類并實現(xiàn)其run()函數(shù);

2. 利用Thread類的Thread(Runnable threadObj, String threadName)來創(chuàng)建thread;

3. 調(diào)用thread的start()方法來執(zhí)行線程。

Extending Thread Class

1. 通過繼承Thread class來生成thread并override起run()函數(shù);

2. 調(diào)用Thread的start()方法來執(zhí)行線程。

Inter-thread communication

我們可以在thread之間使用wait(),notify()進行控制,如下所示。synchronized用于確保對象或方法在同一時間只能被一個線程訪問。

public boolean flag = false;

public synchronized void Question(String? msg){

? ? if(flag){

? ? ? ? ? try{

? ? ? ? ? ? ? ? wait();

? ? ? ? ? }catch(InterruptedException e){

? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ?}

? ? ?}

? ? System.out.println(msg);

? ?flag = true;

? ?notify();

}

ThreadLocal class

Threadlocal class 創(chuàng)建的變量在每個thread中保存一個備份,只能被本線程讀寫,因此,不會受其他線程影響。下面的兩個counter,counter會受不同線程的影響,而threadLocalCounter只受本線程的影響,不受其他線程影響。

class RunnableDemo implements Runnable {??

int counter;? ThreadLocal threadLocalCounter = new ThreadLocal();

public void run() {

counter++;

if(threadLocalCounter.get() != null){

threadLocalCounter.set(threadLocalCounter.get().intValue() + 1);

}else{

threadLocalCounter.set(0);

}

System.out.println("Counter: " + counter);

System.out.println("threadLocalCounter: " + threadLocalCounter.get());

}

}

Deadlock是因為由于多個線程需要相同的locks,但是以不同順利獲得這些locks造成的。

lock和synchronized的區(qū)別:1.synchronized不能保證順序,而lock可以;2. synchronized block沒有timeout,而lock可以提供timeout功能;3.synchronized只能作用于同一個函數(shù),而lock的lock()和unlock()函數(shù)可以用于不同的函數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,881評論 18 139
  • Java is a multi threaded programming language. A multi-th...
    Hackjutsu閱讀 711評論 0 1
  • Java多線程學(xué)習(xí) [-] 一擴展javalangThread類 二實現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 2,986評論 1 18
  • 今天在朋友圈刷到了高中的校門和高中的校服。 從2013年6月畢業(yè),到現(xiàn)在2016年12月,已經(jīng)過去了3年6個月。 ...
    伽輕閱讀 204評論 0 0
  • 5點40,太陽都還沒睡清醒,院里就已經(jīng)傳來了操練的聲音了,這之間不時夾雜著孩子清脆的嗓音,“一--二--三...
    花生的小卷毛閱讀 311評論 0 0