b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

java多线程死锁并发编程学习(1)----并发编程基础前

电脑杂谈  发布时间:2018-02-08 01:19:42  来源:网络整理

java多线程死锁_多线程面试题_java内存管理

并发编程学习(1)----并发编程基础

前言:多线程是程序员必须掌握的一项基础知识,但是由于各种框架封装使得我们平时很少能接触到多线程。一旦项目中发生问题,便无从下手。学会了多线程不仅能帮助你更好地处理项目中的问题,还能对你理解一些框架有所帮助。本系列以《Java并发编程的艺术》为参考,结合网上的一些资料并结合自己的理解整理而成。如有错误,欢迎指正。

1、几个概念

1)进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的独立单位。一个操作系统中可以同时运行多个任务(程序),每个运行的任务(程序)被称为一个进程。例如,启动一个Java程序,操作系统就会创建一个Java进程。

2)线程:它是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可以与其它同属一个进程的其他线程共享进程所拥有的全部资源。

3)上线文切换:

即使单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的。

CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换。

这就好比我们同时读两本书,当在读一本英文的技术书时,发现某个单词不认识,于是便打开字典查找,但是查找之前必须先记住这本书已经读到了多少页的多少行。等查完单词以后,能够继续读这本书。这样的切换是会影响读书效率的,同样上下文切换也会影响多线程的执行效率。

2.为什么要使用多线程?

1)充分利用系统资源

由于摩尔定律周期越来越长,处理器性能的提升方式也从更高的主频向多核发展。线程是大多数操作系统调度的基本单元,而线程是进程的一个实体。一个线程同一时刻只能运行在一个cpu上,这样就无法充分利用系统资源。如果将计算任务分配给多个处理器核上,就会显著减少程序的处理时间。

多线程面试题_java内存管理_java多线程死锁

2)更快地响应时间

例如,在一些复杂的业务中,用户从点击按钮开始,服务端需要进行一系列处理过程才能将最终的结果返回给客户端。java多线程死锁使用多线程技术,可以将实时性要求高的数据处理完成以后即将执行结果返回到客户端。而一些数据一致性不强的操作派发给其它线程处理(如消息队列/Worker)。java多线程死锁这样可以缩短响应时间,提升了用户体验。

3)更好的编程模型(仿生)

Java为多线程提供了良好的、考究并且一致的编程模型,使得开发人员更加专注于问题的解决。比如,在安卓游戏开发中,控制一个人物的工作是由多个线程协调完成的,如果使用多线程则很难实现。

3.多线程面临的问题

在并发编程中,需要解决的两个问题:线程之间如何通信以及线程之间如何同步。通信是指线程之间以何种机制来交换信息,同步是指程序中用于控制不同线程间相对执行顺序的机制。

1)线程间的通信机制有两种:共享内存和消息传递。

共享内存的并发模型中,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程之间没有公共状态,线程间的通信必须通过发送消息来进行显示通信(比如Java中Object对象的wait()与notify())。

2)同步机制

在并发编程中,尤其是在处理共享资源时,需要将某些操作(例如写操作)转化为同步,以免造成难以想象的后果。常见的同步机制有以下两种:JVM层面,借助Object的monitor实现(synchronized);通过总线锁或者锁定内存部分区域实现,例如volatile。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-66302-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    每日福利
    热点图片
    拼命载入中...