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



一切都不是凭空出现的,线程也不是. 创建后的状态称为新状态.
例如:
Thread thread = new Thread();

创建线程后,将无法使用该线程,即,让用户在此期间设置一些属性,
例如:
// 设置类加载器
thread.setContextClassLoader(System.class.getClassLoader());
// 设置线程名称
thread.setName(商品服务-product-service);
// 是否为守护线程/用户线程
thread.setDaemon(false);
// 设置线程优先级
thread.setPriority(5);

线程由thread.start()方法启动. 启动该线程时,它意味着该线程“能够”运行多线程阻塞状态,并且并不意味着该线程将运行,因为它需要占用资源并获得CPU使用权才能运行. 因此多线程阻塞状态,此状态称为可操作状态. 从上图可以看出,线程不仅可以通过start()启动,它可以进入Runnable状态,还可以通过其他方式来访问它.
通过努力,线程获得了使用CPU的权利并进入执行程序. 此时,该状态称为运行状态. 多线程会抢占CPU资源,并且只有一个线程同时进入关键部分. 为了确保线程访问资源的安全性,只有一个线程同时进入同步块,而其他没有访问权限的线程将进入阻塞状态.
等待阻塞: 通过调用线程的wait()方法,允许线程等待作业完成.

同步阻塞: 该线程无法获取同步锁(由于该锁已被其他线程占用),它将进入同步阻塞状态.
其他阻塞: 通过调用线程的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
穷怕了
听得我分分钟不想看了
该出去玩就出去玩