Java成神之路(二十)并行与并发,线程与进程

并发与并行

  1. 并发与并行
    并发:在一个时间段中有几个程序都处于已启动运行到运行结束之中,且这几个程序都是在同一个处理机上运行,但在任意一个时刻点只有一个程序在运行
    并行:两个或以上的程序同时在不同的处理器上处理。互相不抢夺CPU资源。

  2. 两者区别
    并行是两个或以上的程序同时进行,并发是指两个或者在同一个时间间隔内发生。意思为:当多个处理器机器上,多个应用程序可以并发在分配到多个处理器上,实现并行执行。
    在这里插入图片描述
    线程、进程

  3. 线程的实现,状态
    各线程根据优先级轮流获得CPU的调度权。线程的调度由JVM进行。在运行池中有多个就绪的线程等待CPU。
    状态:
    新建状态(NEW),未启动;
    就绪状态(Runnable),调用了Start方法,已经运行,等待获取系统资源;
    堵塞状态(Blocked),线程等待锁的状态;
    限期等待状态(waiting),等待另一个线程以执行特点的操作,Object.wait(),Thread,join(),LockSupport.park,会进入限期等待状态;
    无限期线程等待状态(TIMED_WAITING)(Sleep会进入,不会释放锁,带参数的Object.wait(),Thread,join(),LockSupport.parkNanos, ,LockSupport.parkUntil);
    线程结束状态(Terminated)。

  4. 优先级:
    当线程的优先级没有指定时,所有线程都携带普通优先级。
    优先级可以用从1到10的范围指定。10表示最高优先级,1表示最低优先级,5是普通优先级。
    优先级最高的线程在执行时被给予优先。但是不能保证线程在启动时就进入运行状态。
    与在线程池中等待运行机会的线程相比,当前正在运行的线程可能总是拥有更高的优先级。
    由调度程序决定哪一个线程被执行。
    t.setPriority()用来设定线程的优先级。
    在线程开始方法被调用之前,线程的优先级应该被设定。
    可以使用常量,如MIN_PRIORITY,MAX_PRIORITY,NORM_PRIORITY来设定优先级。

  5. 线程调度
    协同调度:线程执行的时间由线程本身决定,线程主动通知系统切换为另一个系统,优点为无线程同步问题,缺点为线程执行时间未知,容易阻塞。
    抢占式调度:由系统分配执行时间,切换由系统决定,优点为可控制执行时间,JVM主要方法。

  6. 创建线程的方式
    继承Thread类创建线程,重写Run()方法,并调用Start()
    实现Runnable接口,重写Run()方法,创建接口实例,调用Start()
    使用Callable和Future创建线程:创建Callable接口实现类,实现Call()方法,并创建实例,通过FutureTask类包装Callable对象,封装Call()返回值,使用FutureTask对象作为Thread对象的target创建线程(主要还是因为FutureTask实现了Runnable),调用get()获取结束后返回值。
    线程池:Executor

  7. 守护线程,进程
    守护线程:在程序运行的时候在后天提供一种通用服务:垃圾回收;这种线程不属于不可或缺,当所有非守护进程终止后,会终止所有的守护进程,程序终止。不能把正常运行的常规线程设置为守护线程。
    进程:并发执行的程序在执行过程中分配和管理资源的基本单位。线程属于进程的一部分,是CPU的基本调度单位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值