Java教程

Java多线程超级详解

本文主要是介绍Java多线程超级详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

多线程能够提升程序性能,也属于高薪必能核心技术栈,本篇会全面详解Java多线程。

主要包含如下几点:

基本概念

很多人都对其中的一些概念不够明确,如同步、并发等等,让我们先建立一个数据字典,以免产生误会。

进程

在操作系统中运行的程序就是进程,比如你的QQ、播放器、游戏、IDE等等

线程

一个进程可以有多个线程,如视频中同时听声音,看图像,看弹幕,等等。

多线程

多线程:多个线程并发执行。

同步

Java中的同步指的是通过人为的控制和调度,保证共享资源的多线程访问成为线程安全,来保证结果的准确。

比如:关键字,在保证结果准确的同时,提高性能,线程安全的优先级高于性能。

并行
多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。

并发

 

通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。

并发往往在场景中有公用的资源,那么针对这个公用的资源往往产生瓶颈,我们会用TPS或者QPS来反应这个系统的处理能力。

 

线程的生命周期

在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态

  • 新建状态:当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值
  • 就绪状态:当线程对象调用了start()方法之后,该线程处于就绪状态。Java虚拟机会为其创建方法调用栈和程序计数器,等待调度运行
  • 运行状态:如果处于就绪状态的线程获得了CPU,开始执行run()方法的线程执行体,则该线程处于运行状态
  • 阻塞状态:当处于运行状态的线程失去所占用资源之后,便进入阻塞状态
  • 死亡状态:线程在run()方法执行结束后进入死亡状态。此外,如果线程执行了interrupt()或stop()方法,那么它也会以异常退出的方式进入死亡状态。

 

线程状态的控制


可以对照上面的线程状态流转图来看具体的方法,这样更清楚具体作用:

1.start()

启动当前线程, 调用当前线程的run()方法

2.run()

通常需要重写Thread类中的此方法, 将创建的线程要执行的操作声明在此方法中

3.yield()

释放当前CPU的执行权

4.join()

在线程a中调用线程b的join(), 此时线程a进入阻塞状态, 知道线程b完全执行完以后, 线程a才结束阻塞状态

5.sleep(long militime)

让线程睡眠指定的毫秒数,在指定时间内,线程是阻塞状态

6.wait()

一旦执行此方法,当前线程就会进入阻塞,一旦执行wait()会释放同步监视器。

7.sleep()和wait()的异同

相同点:两个方法一旦执行,都可以让线程进入阻塞状态。

标签:Java,程序性能,高薪,多线程, 来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

这篇关于Java多线程超级详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!