zoukankan      html  css  js  c++  java
  • java-线程

    一.线程:一个进程有多个线程,线程之间资源共享,线程是系统运行能够调度的最小单位。

    二.线程中的并行:指两个或者多个事件在同一时刻发生;并行:指两个或多个事件在同一时间间隔发生

    三.线程的生命周期:

      1.新建态:使用new 创建一个线程对象,仅在堆中分配内存空间,在调用starts方法之前。线程没有启动,仅仅是一个线程对象而已。

                      Thread thread = new Thread();

             线程对象调用starts进入可运行态。

      2.可运行态:运行态:线程对象获得jvm调度,如果存在多个cpu,那么允许多个线程并行执行。

                      就绪态:线程对象调用starts方法后,等待jvm调度,此时线程并没有运行

                 thread.starts();

      3.阻塞态:正在运行的线程因为某些原因放弃cpu,暂时停止运行,就会进入阻塞态。此时JVM不会给线程分配cpu,直到线程重新进入就绪态,才有机会转到运行态;

                        阻塞态只能先进入就绪态,不能直接转为运行态。

           阻塞态情况:1.当A线程处于运行过程中时,试图获取同步锁,但锁却被B线程获取,此时jvm把线程A存入到对象的锁池中,A线程进入阻塞态。

                    2.当线程在运行时发出IO请求,此时进入阻塞态;

      4.等待态:线程对象调用无参的wait()方法(等待状态只能被其他线程唤醒)

                     当线程处于运行中时调用wait()方法,jvm就把当前线程存入到对象锁池中

      5.计时等待态:线程对象调用了带参数的wait(long time),sleep(long time)方法。

                             1. 当线程处于运行中时调用wait(long time)方法,jvm就把当前线程存入到对象锁池中

           2.调用了sleep(long time);

                             wait和sleep的区别:1.wait是对象方法,sleep是线程方法

                                                              2.线程对象调用wait方法,会放弃对象锁;sleep不会

                    3.线程对象调用wait()方法后必须调用notify和notifyAll唤醒,且必须位于同步代码块中或同步方法中

      6.终止态:也称为死亡状态,表示线程终止。

                     1.正常执行run方法而退出

                     2.遇到异常

                线程一旦死亡,不能调用start方法,否则会报异常。

  • 相关阅读:
    你有认真了解过自己的“Java对象”吗? 渣男
    布隆过滤器,你也可以处理十几亿的大数据
    阻塞队列——手写生产者消费者模式、线程池原理面试题真正的答案
    Java集合面试题汇总篇
    Github 骚操作
    责任链模式——更灵活的if else
    时间复杂度到底怎么算
    创造DotNet Core轻量级框架【二】
    创造DotNet Core轻量级框架【一】
    小胖李的面试之旅(二)
  • 原文地址:https://www.cnblogs.com/SoftwareBuilding/p/11453289.html
Copyright © 2011-2022 走看看