什么是java的并发编程?

更新时间: 2020-07-10 15:40:06来源: 粤嵌教育浏览量:11772

      说到java的话粤嵌科技的小编相信大家肯定是不陌生的了,对于java来说从问世以来一直在开发界有着很高的地位的。很多的产品在开发语言的选择上也肯定是java 的,所以说大家对于java语言的熟悉度就很高的了,那么什么是java的并发编程呢?

  1、线程基础概念


  线程是指在一个单独进程中,对于CPU和内存而言的多个工作单位,所有线程在进程中的资源都是共享的,包括全局数据、执行代码等。


  cpu核心数与线程数


  核心数 : 线程数 = 1 : 1


  如一个8核的cpu,该cpu会至少支持8个线程同时运行


  intel引入了超线程技术后:


  核心数 : 线程数 = 1 : 2


  在编码过程中可以感觉到同时运行的线程远远不止这些。由于cpu的时间片轮转机制又称RR调度,简单点讲,操作系统会把已就绪的线程排成一个队列,给每个进程一个时间分片,该线程在cpu中执行完这个时间分片后,不论是否执行完都会让出cpu资源给另外的线程,这样在某一时间段内就好像有很多线程在同时运行。


  操作系统和cpu在进行时间分片的任务切换时也是需要时间的,而且往往占用的时间比例又很大,所以在多线程开发时关注上下文切换对于多线程执行时间和性能的影响。


  二、进程和线程区别


  进程:程序运行进行资源分配的小单位,进程中有多个线程,会共享这个线程的资源


  线程:cpu调度的小单位,必须依赖进程而存在


  例子:启动的一个jar包程序就是一个进程,而可以通过启动参数配置它的内存大小,-xmx,-xms等。而每一个请求都是在线程上去进行的,cpu通过执行线程任务完成每个请求任务。


  三、并行和并发


  并行:同一时刻,可以同时处理事情的能力


  并发:与单位时间有关,在单位时间内可以处理问题的能力


  举个例子,假设不考虑超线程技术,一个4核cpu在任何一个时刻处理的是4个线程,并行数为4,而由于时间片轮转机制,它在1秒内可以支持处理100个线程,它在1秒内的并发数为100


  四、高并发编程优势


  充分利用cpu的资源。如果是单线程,只占用一个核,其它的空闲;加快响应时间。合理的设计多线程程序,使请求处理加快;程序模块化异步化


  线程共享资源,会存在冲突、会存在死锁、启动线程太多,滥用线程,压垮服务器。线程方法,java线程是协作式的,而不是抢占式


  五、线程终止的方法interrupt()


  线程之前提供了stop(),resume(),suspend()方法来终止线程,但已不建议使用,stop()会导致线程不会正确的释放资源,suspend()会导致死锁。


  要通过interrupt(),isInterrupted(),static interrupted()来自己实现中断线程


  interrupt() :调用一个线程的interrupt() 方法中断一个线程,并不是强行关闭这个线程,只是跟这个线程打个招呼,将线程的中断标志位置为true,线程是否中断,由线程本身决定。


  isInterrupted(): 判定当前线程是否处于中断状态。


  static interrupted() :判定当前线程是否处于中断状态,同时中断标志位改为false。


  thead.setPriority()方法


  优先级的范围1~100,缺省为5,但线程的优先级不可靠,不建议作为线程开发时候的手段。


  java线程是映射到系统的原生线程来实现的,所以线程的调度终决定于操作系统。虽然现在很多操作系统提供了线程优先级的概念,但是不见得会与java线程的优先级一一对应,如果优先级比java线程多还好说,要是少的话,就不得不出现几个优先级相同的情况了。


  Java的并发编程是比较复杂的,在学习的过程中可能会出现错乱,但是如果说你有一个专业的讲师来指导的话肯定是没有问题的。粤嵌科技欢迎每位想要学习java语言的学员来我们公司的java培训班进行实地考察,也可以点击我们文章下面的获取试听资格按钮来获取我们的java课程免费试听资格,在试听中可以更加深入的了解我们粤嵌科技。

免费预约试听课