网站域名是什么意思,网上申报系统,西安市建设协会网站,大淘客网站如何做seo一、通用的线程生命周期#xff1a;“五态模型” 二、java线程有哪几种状态#xff1f;
New#xff1a;创建完线程Runable#xff1a;start(),这里的Runnable包含操作的系统的Running#xff08;运行状态#xff09;和Ready#xff08;上面的可运行状态#xff09;Blo…
一、通用的线程生命周期“五态模型” 二、java线程有哪几种状态
New创建完线程Runablestart(),这里的Runnable包含操作的系统的Running运行状态和Ready上面的可运行状态Blocked等待一个排它锁当java线程在调用阻塞api时阻塞读取文件是否会转到Blocked那在jvm层面java线程状态是不会发生变化还是Runnable因为jvm不关心操作系统调度在jvm看来等待cpu使用权操作系统层面处于可运行状态和等待i/o操作系统此时处于休眠状态没有区别都是在等待某个资源所以都归于Runnable状态。只有在等待获取隐式锁的时候才会进入到阻塞状态。Waiting无限期等待等待其他线程显示的唤醒否则不会被分配cpu时间片 Time Waiting限期等待无需等待其他线程显式的唤醒在一定时间之后会被系统自动唤醒
调用Thread.sleep方法会使得线程进入限期等待状态常常用“使一个线程睡眠”描述调用object.waitxxx 方法使得线程进入限期等待常常用“挂起一个线程”描述
睡眠和挂起是一个动作阻塞和等待是一个状态阻塞和等待的区别在于阻塞是一个被动的它是在等待一个排它锁等待无论来自于sleep还是wait是一个主动的通过主动调用方法进入的
Terminated: 1、线程正常执行完 2、线程被interrupt这里是不建议使用stop的如果用stop杀死线程的话如果线程持有Lock锁就不会调用unlock也就不会释放锁。
另外Blocking、Waiting、Timed_Waiting这几种状态可以统一理解为休眠状态当线程处于这几种状态时线程是没有cpu的使用权的。 三、java线程之间状态切换是什么样的 四、创建线程有哪些方式
实现Runnable接口然后传到Thread作为参数实现Callable接口然后将Callable接口传入到FutureTask中再将FutureTask传入到Thread作为参数 Callable实现返回值futureTask实现异步
直接继承Thread重新run方法 五、interrupt方法
interrupt作为一种线程交互的方式相比stop温柔多了。对于被interrupt的线程如果想要接收通知有以下2种方式
异常
当线程处于 Waiting、Timed_Waiting状态时如果其他线程调用线程A的interrupt方法会使线程A返回到Runnable状态同时线程A的代码会触发InterruptException异常。我们在调用wait、join、sleep方法都能看的这些方法都会throws interruptException这个异常的触发条件就是其他线程调用该线程的interrupt方法
当线程A处于Runnable并且阻塞在java.io.channels.interruptiableChannel上时如果其他线程调用A的interrupt方法线程A会触发java.nio.channels.ClosedByinterruptException而阻塞在java.nio.channels.Selector上时如果其他线程调用线程A的interrupt方法线程A会立即返回
主动检测
通过主动检测 thread.isInterupted方法来判断自己是否被中断了