怎样解析java多线程编程


这期内容当中小编将会给大家带来有关怎样解析java多线程编程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。进程:一个正在执行的程序.每个进程执行都有一个执行顺序,该顺序是一个执行路径,或叫一个控制单元.一个进程至少有一个线程.线程:就是进程中的一个独立的控制单元.线程控制这进程的执行.多进程的缺点:进程切换开销大;进程间的通信很不方便。多线程:指的是在单个程序中可以同时运行多个不同的线程,执行不同的任务,线程切换的开销小。线程的生命周期Java做了很多工作,力求把这些细节抽象化。Java提供了一个名为Thread.State的枚举类型,囊括了操作系统看到的线程状态。Thread.State中的值概述了一个线程的生命周期。NEW已经创建线程,但还没在线程对象上调用start()方法。所有线程一开始都处于这个状态。RUNNABLE线程正在运行,或者当操作系统调度线程时可以运行。Java实现内存管理和并发编程的方式。BLOCKED阻塞状态线程中止运行,因为它在等待获得一个锁,以便进入声明为synchronized的方法或代码块。具备运行资格,没有执行权。WAITING线程中止运行,因为它调用了Object.wait()或Thread.join()方法。在sleep和wait时,既没有运行资格,有没有执行权。TIMED_WAITING线程中止运行,因为它调用了Thread.sleep()方法,或者调用了Object.wait()或Thread.join()方法,而且传入了超时时间。TERMINATED线程执行完毕。线程对象的run()方法正常退出,或者抛出了异常。可见性和可变性在Java中,其实一个进程中的每个Java应用线程都有自己的栈(和局部变量),不过这些线程共用同一个堆,因此可以轻易在线程之间共享对象,毕竟需要做的只是把引用从一个线程传到另一个线 香港云主机程。由此引出Java的一个一般设计原则——对象默认可见。如果我有一个对象的引用,就可以复制一个副本,然后将其交给另一个线程,不受任何限制。Java中的引用其实就是类型指针,指向内存中的一个位置,而且所有线程都共用同一个地址空间,所以默认可见符合自然规律。除了默认可见之外,Java还有一个特性对理解并发很重要——对象是可变的(mutable),对象的内容(实例字段的值)一般都可以修改。使用final关键字可以把变量或引用声明为常量,但这种字段不属于对象的内容。这两个特性(跨线程可见性和对象可变性)结合在一起,大大增加了理解Java并发编程的难度。并发编程的安全性如果我们想编写正确的多线程代码,得让程序满足一个重要的条件,即:在一个程序中,不管调用什么方法,也不管操作系统如何调度应用线程,一个对象看到的任何其他对象都不处于非法或不一致的状态,这样的程序才称得上是安全的多线程程序。互斥(mutualexclusion)和状态保护只要修改或读取对象的过程中,对象的状态可能不一致,这段代码就要受到保护。为了保护这种代码,Java平台只提供了一种机制:互斥。Java为开发者提供了synchronized关键字。这个关键字可以用在代码块或方法上,使用时,Java平台会限制访问代码块或方法中的代码。因为synchronized关键字把代码包围起来,所以很多开发者认为,Java的并发和代码有关。有些资料甚至把synchronized修饰的块或方法中的代码称为临界区,还认为临界区是并发的关键所在。其实不然,稍后会看到,其实我们要防范的是数据的不一致性。Java平台会为它创建的每个对象记录一个特殊的标记,这个标记叫监视器(monitor)。synchronized使用这些监视器(或叫锁)指明,随后的代码可以临时把对象渲染成不一致的状态。synchronized修饰的代码块或方法会发生一系列事件,详述如下:线程需要修改对象时,会临时把对象变成不一致状态;线程获取监视器,指明它需要临时互斥存储这个对象;线程修改对象,修改完毕后对象处于一致的合法状态;线程释放监视器。同步是保护状态的一种协助机制,因此非常脆弱。一个缺陷(需要使用synchronized修饰的方法却没有使用)就可能为系统的整体安全性带来灾难性的后果。之所以使用synchronized这个词作为“需要临时互斥存储”的关键词,除了说明需要获取监视器之外,还表明进入代码块时,JVM会从主内存中重新读取对象的当前状态。类似地,退出synchronized修饰的代码块或方法时,JVM会刷新所有修改过的对象,把新状态存入主内存。volatile关键字Java还提供了另一个关键字,用来并发访问数据——volatile。这个关键字指明,应用代码使用字段或变量前,必须重新从主内存读取值。同样,修改使用volatile修饰的值后,在写入变量之后,必须存回主内存。volatile关键字的主要用途之一是在“关闭前一直运行”模式中使用。编写多线程程序时,如果外部用户或系统需要向处理中的线程发出信号,告诉线程在完成当前作业后优雅关闭线程,那么就要使用volatile。这个过程有时叫作“优雅结束”模式。上述就是小编为大家分享的怎样解析java多线程编程了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注开发云行业资讯频道。

相关推荐: 如何解决Windows系统越来越慢的问题

这篇文章主要为大家展示了“如何解决Windows系统越来越慢的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家 香港云主机一起研究并学习一下“如何解决Windows系统越来越慢的问题”这篇文章吧。方法一:打开计算机管理页面,选中本地…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 08/13 16:03
下一篇 08/13 16:03

相关推荐