深入了解Java多线程和并发框架-线程状态

电脑杂谈  发布时间:2020-06-15 18:13:13  来源:网络整理

多线程阻塞状态_线程7种状态_java线程状态判断

Java体系结构的基础zhuanlan.zhihu.com

图标

线程7种状态_java线程状态判断_多线程阻塞状态

一切都不是凭空出现的,线程也不是. 创建后的状态称为新状态.

例如:

Thread thread = new Thread();

多线程阻塞状态_java线程状态判断_线程7种状态

创建线程后,将无法使用该线程,即,让用户在此期间设置一些属性,

例如:

// 设置类加载器
thread.setContextClassLoader(System.class.getClassLoader());
// 设置线程名称
thread.setName(商品服务-product-service);
// 是否为守护线程/用户线程
thread.setDaemon(false);
// 设置线程优先级
thread.setPriority(5);

多线程阻塞状态_线程7种状态_java线程状态判断

线程由thread.start()方法启动. 启动该线程时,它意味着该线程“能够”运行多线程阻塞状态,并且并不意味着该线程将运行,因为它需要占用资源并获得CPU使用权才能运行. 因此多线程阻塞状态,此状态称为可操作状态. 从上图可以看出,线程不仅可以通过start()启动,它可以进入Runnable状态,还可以通过其他方式来访问它.

通过努力,线程获得了使用CPU的权利并进入执行程序. 此时,该状态称为运行状态. 多线程会抢占CPU资源,并且只有一个线程同时进入关键部分. 为了确保线程访问资源的安全性,只有一个线程同时进入同步块,而其他没有访问权限的线程将进入阻塞状态.

等待阻塞: 通过调用线程的wait()方法,允许线程等待作业完成.

线程7种状态_多线程阻塞状态_java线程状态判断

同步阻塞: 该线程无法获取同步锁(由于该锁已被其他线程占用),它将进入同步阻塞状态.

其他阻塞: 通过调用线程的sleep()或join()或发出I / O请求,线程将进入阻塞状态. 当sleep()状态超时,join()等待线程终止或超时或I / O处理完成时,线程将重新进入就绪状态.

通过调用对象的wait(time)方法或调用线程的sleep(time)/ join(time)以等待/休眠指定的时间,线程将进入TIMED_WAITING(sleeping)状态,直接时间已经到来,将进入Runnable状态,重新占用CPU资源. 通过调用对象的wait()方法,抢占资源的线程将等待作业完成,或者主动加入()另一个线程以使当前线程释放资源并等待加入的线程完成工作,并且线程将进入等待状态. 当线程由于异常而完成执行或退出run()方法时,线程将终止其生命周期.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-246475-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...