并發(fā)系統(tǒng)設(shè)計_第1頁
并發(fā)系統(tǒng)設(shè)計_第2頁
并發(fā)系統(tǒng)設(shè)計_第3頁
并發(fā)系統(tǒng)設(shè)計_第4頁
并發(fā)系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

并發(fā)概念

?進(jìn)程與線程

?線程安全

?臨界資源

?競爭

?鎖

?可見性

?原子性

?什么時候使用多線程

?無處不在的線程

什么時候使用多線程

線程安全

.專多個俵彩⑥娟楊向一個莢時,治果

■彳用老虎這些名怒的調(diào)度"文藥外功,

苦虹調(diào)用方代恁彳需恁額外的協(xié)調(diào),

恒個手的行為仍受立錦的,那小這個

英就受旗彩名全的。

臨界資源與競爭

原子性

0

無處不在的線程

即使你們沒有創(chuàng)建過任何線程,

也不能說線程和你無關(guān)

Servlet

Struts1的Action

0%

創(chuàng)建線程對象

newThread(){

?Override

publicvoidrun(){

)

};

newThread(newRunnable(){

publicvoidrun(){

)

});

線程啟停

啟動:

thread.start();

wait

join

sleep

停止1:停止2:InterruptibleChannel

thread.stop();thread.interrupt();

停止3:

while(lstop){

)

,n

0

stop=true;

等待線程結(jié)束

thread.join();

or

thread.join(IOOO);

FutureTask<lnteger>task=newFutureTask<lnteger>(newCallable<lnteger>(){

publicIntegercall()throwsException{

returnnull;

)

});

newThread(task).start();

Integerresult=task.get();

?顯式鎖

Locklock=newReentrantLock();lock.tryLock();

lock.lock();

try{lock.locklnterruptiblyO;

}finally{

lock.unlock();

}

讀寫鎖

ReadWriteLocklock=newReentrantReadWriteLock();

Lockr=lock.readLock();

Lockw=lock.writeLock();

信號量

Semaphoresema=newSemaphore(3);

sema.acquire();

sema.releaseO;

等待和通知

Listlist;

thread1:

synchronized(list){

if(list.isEmpty()){

list.wait();

)

}

Thread2:

synchronized(list){

list.add(a);

list.notify();

}

0

等待和通知Condition

Locklock=newReentrantLock();

Conditionconditionl=lock.newCondition();

Conditioncondition2=lock.newCondition();

condition1.await();

condition1.signal();

0

可見性

?volatilebooleanstop

原子變量

?Atomiclnteger>AtomicBoolean>

AtomicReference

compareAndSet

decrementAndGet

集合類

?線程安全

Vector(ConcurrentModificationException

)Hashtable(

ConcurrentModificationException)

線程不安全

LinkedListArrayListHashMap

*,0

0%

并發(fā)集合類

?BlockingQueue

take()

?ConcurrentMap

putlfAbsentreplace(Kkey,VoldValue,VnewValue)

?ConcurrentLinkedQueue

非阻塞線程安全隊列

?CopyOnWriteArrayList

多遍歷,少插入

??n

0%

線程池

?Executors.newCachedThreadPool

Executors.newFixedThreadPool

?Executors.newSingleThreadExecutor

?Executors.newScheduledThreadPool

?ThreadPoolExecutor

ScheduledThreadPoolExecutor

??r>

0%

多線程系統(tǒng)設(shè)計

-線程安全設(shè)計

?高性能線程設(shè)計

線程安全設(shè)計

?識別臨界資源

?線程安全設(shè)計

識別臨界資源

?JAVA語言內(nèi)的臨界資源

static的變量

類的成員變量

?即:一個類沒有成員變量,也沒有訪問別的static的變量

,并且其函數(shù)的參數(shù)是線程安全的,那么這個類一定是線

程安全的。

線程安全設(shè)計

?不可變的類一定是線程安全的。

?控制變量的可見區(qū)域

控制使用在一個方法里

使用threadlocal方法

?最后考慮使用鎖

*,0

0%

線程性能設(shè)計

?amdahl定律

?高性能設(shè)計方法

amdahl定律

0

提高并行度

影響并行度的因素

鎖、同步

設(shè)計因素

盡量無鎖并發(fā)

?合理設(shè)計,限定對象的作用范圍

?盡量不要再搞所謂的對象池

structsl——>structs2

*,0

0%

合理的使用鎖

Lor

?只鎖必要的,減小鎖的范圍

?快進(jìn)快出,不要鎖10等慢的操作,如屬競

爭資源,變更設(shè)計

-分離鎖,加大鎖的數(shù)量,每個鎖控制一部

分資源。

?鎖不止影響并行度

加大java額外操作

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論