Java并发编程的基础原理介绍.doc

Java并发编程的基础原理介绍.doc

ID:57609706

大小:149.52 KB

页数:11页

时间:2020-08-28

Java并发编程的基础原理介绍.doc_第1页
Java并发编程的基础原理介绍.doc_第2页
Java并发编程的基础原理介绍.doc_第3页
Java并发编程的基础原理介绍.doc_第4页
Java并发编程的基础原理介绍.doc_第5页
资源描述:

《Java并发编程的基础原理介绍.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、java上下文的切换并行不一定比串行快,老师今天给大家介绍一下java并发编程的基础原理。时间片是CPU分配给各个线程的时间,一般是几十毫秒。因为时间片非常短,所以CPU通过不停地切换线程执行,达到多个线程同时执行的效果。浙江优就业CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换。减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程。无锁并发编程:如将数据的ID按照Hash算法取模分段,不同的线程处理

2、不同的段的数据。CAS算法:Java的Atomic包使用CAS算法来更新数据,而不需要加锁。使用最少线程:避免创建不需要的线程。协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。死锁锁是个非常有用的工具,运用场景非常多。但同时它也会带来一些困扰,那就是可能会引起死锁,一旦产生死锁,就会造成系统功能不可用。避免死锁的常用方法§避免一个线程同时获取多个锁§§避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源§§尝试使用定向锁,使用lock.tryLock(timeout)来替代使用内部锁机制§§对于数据库锁,加锁和解锁必现在一个数据库连接池里,否则会出现解锁失

3、败的现象§资源限制资源限制是指在进行并发编程时,程序的执行速度受限于计算机硬件或软件资源。硬件资源限制有带宽的上传/下载速度、硬盘读写速度和CPU处理速度。软件资源限制有数据库的连接数和socket连接数等。对于硬件资源限制,可以考虑使用集群并行执行程序。对于软件资源限制,可以考虑使用资源池将资源复用。需要根据不同的资源限制调整程序的并发度Java内存模型Java的并发采用的是共享内存模型,Java线程之间的通讯总是隐式进行,整个通信过程对程序员完全透明。Java线程之间的通信由Java内存模型(JMM)控制,JMM决定一个线程对共享变量的写入核实对另一个线程可见1.线程对共享变量的所有

4、操作都必须在自己的工作内存中进行,不能直接在主内存中读写2.3.不同线程之间无法直接访问其他线程工作内存中的变量,线程间变量值的传递需要通过主内存来完成。4.5.线程1对共享变量的修改,要想被线程2及时看到,必须经过如下2个过程:6.把工作内存1中更新过的共享变量刷新到主内存中1.将主内存中最新的共享变量的值更新到工作内存2中2.可见性、原子性、重排序可见性:一个线程对共享变量的修改,更够及时的被其他线程看到原子性:即不可再分了,不能分为多步操作。比如赋值或者return。比如"a=1;"和"returna;"这样的操作都具有原子性。类似"a+=b"这样的操作不具有原子性,在某些JVM中

5、"a+=b"可能要经过这样三个步骤:1.取出a和b2.3.计算a+b4.5.将计算结果写入内存6.重排序:重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段Volatilevolatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”Volatile实现内存可见性是通过store和load指令完成的;也就是对volatile变量执行写操作时,会在写操作后加入一条store指令,即强迫线程将最新的值刷新到主内存中;而在读操作时,会加入一条load指令,即强迫从主内存中读入变量的值。但volatile不保证volatile变量的原子性

6、。classMyThreadextendsThread{privatevolatilebooleanisStop=false;publicvoidrun(){while(!isStop){System.out.println("dosomething");}}publicvoidsetStop(){isStop=true;}}线程执行run()的时候我们需要在线程中不停的做一些事情,比如while循环,那么这时候该如何停止线程呢?如果线程做的事情不是耗时的,那么只需要使用一个标志即可。如果需要退出时,调用setStop()即可。这里就使用了关键字volatile,这个关键字的目的是如果修

7、改了isStop的值,那么在while循环中可以立即读取到修改后的值Synchronized原理Synchronized在JVM的实现原理,主要是使用了monitorenter和monitorexit指令实现。monitorenter指令是在编译后插入到同步代码块的开始位置,而monitorexit是插入到方法结束处和异常处,JVM要保证整个monitorenter必须有对应的monitorexit与之配对。任何对象都有一个moni

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。