并发系统设计_第1页
并发系统设计_第2页
并发系统设计_第3页
并发系统设计_第4页
并发系统设计_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

并发概念

•进程与线程

•线程安全

•临界资源

•竞争

・锁

•可见性

•原子性

•什么时候使用多线程

•无处不在的线程

什么时候使用多线程

线程安全

.专多个俵彩⑥娟杨向一个荚时,治果

■彳用老虎这些名怒的调度"文药外功,

苦虹调用方代恁彳需恁额外的协调,

恒个手的行为仍受立锦的,那小这个

英就受旗彩名全的。

临界资源与竞争

原子性

0

无处不在的线程

即使你们没有创建过任何线程,

也不能说线程和你无关

Servlet

Struts1的Action

0%

创建线程对象

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;

等待线程结束

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%

并发集合类

•BlockingQueue

take()

•ConcurrentMap

putlfAbsentreplace(Kkey,VoldValue,VnewValue)

•ConcurrentLinkedQueue

非阻塞线程安全队列

•CopyOnWriteArrayList

多遍历,少插入

••n

0%

线程池

•Executors.newCachedThreadPool

Executors.newFixedThreadPool

•Executors.newSingleThreadExecutor

•Executors.newScheduledThreadPool

•ThreadPoolExecutor

ScheduledThreadPoolExecutor

••r>

0%

多线程系统设计

­线程安全设计

•高性能线程设计

线程安全设计

•识别临界资源

•线程安全设计

识别临界资源

•JAVA语言内的临界资源

static的变量

类的成员变量

•即:一个类没有成员变量,也没有访问别的static的变量

,并且其函数的参数是线程安全的,那么这个类一定是线

程安全的。

线程安全设计

•不可变的类一定是线程安全的。

•控制变量的可见区域

控制使用在一个方法里

使用threadlocal方法

•最后考虑使用锁

*,0

0%

线程性能设计

•amdahl定律

•高性能设计方法

amdahl定律

0

提高并行度

影响并行度的因素

锁、同步

设计因素

尽量无锁并发

•合理设计,限定对象的作用范围

•尽量不要再搞所谓的对象池

structsl——>structs2

*,0

0%

合理的使用锁

Lor

•只锁必要的,减小锁的范围

•快进快出,不要锁10等慢的操作,如属竞

争资源,变更设计

­分离锁,加大锁的数量,每个锁控制一部

分资源。

•锁不止影响并行度

加大java额外操作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论