线程的几种状态及相关方法使用
2018-08-24 17:05
344 查看
新建(new)
新建一个线程的对象。可运行(runable)
线程对象创建后,其他线程调用该线程的start方法。或者该线程位于可运行线程池中等待被线程调用,已获取cpu的使用权。运行(running)
可运行的线程获取了cpu的使用权,执行程序代码/阻塞(block)
由于某些原因该线程放弃了cpu的使用权。停止执行。除非线程进入可运行的状态,才会有机会获取cpu的使用权。1. 等待阻塞:运行中的线程执行wait方法,这时候该线程会被放入等待队列。
2. 同步阻塞:运行中的线程获取同步锁,如果该同步锁被别的线程占用,这个线程会成被放入锁池,等待其他线程释放同步锁。
3. 其他阻塞:运行的线程执行sleep或者join方法这个线程会成为阻塞状态。当sleep超时,join等待线程终止,该线程会进入可运行状态。
死亡(dead)
线程run mian 执行完毕后,或者因为某些异常产生退出了 run 方法,该线程的生命周期结束。wait、notify依次打印
public class Test { public static void main(String[] args) { Object a = new Object(); Object b = new Object(); Object c = new Object(); Thread t1 = new Thread(new Print(a, b, "A")); Thread t2 = new Thread(new Print(b, c, "B")); Thread t3 = new Thread(new Print(c, a, "C")); t1.start(); t2.start(); t3.start(); } } class Print implements Runnable { Object self; Object next; String str; public Print(Object self, Object next, String str) { this.self = self; this.next = next; this.str = str; } @Override public void run() { for (int i = 0; i < 10; i++) { synchronized (self) { synchronized (next) { System.out.println(str); next.notify(); } try { if (i == 9) { return; } self.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
相关文章推荐
- 使用boost线程定时器作为后台线程来切换主循环程序状态方法总结
- C# 使用线程状态标识替代过时suspend和resumn方法
- 【Java面试题】23 java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
- mybatis中获取SqlSessionFactory的几种方法及其相关使用
- Java多线程-线程状态及方法的使用
- 使用boost线程定时器作为后台线程来切换主循环程序状态方法2
- java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用
- 谈谈 Java 线程状态相关的几个方法
- Android中使用异步线程更新UI视图的几种方法
- 使用内部类来将线程隐藏在类中的几种方法
- Java中有几种方法实现一个线程,用什么关键字修饰同步方法?stop()和suspend()方法为何不提倡使用?
- 浅谈Android中使用异步线程更新UI视图的几种方法
- 多线程的使用方法、线程同步、线程状态及相应的一些线程函数用法、概述等。
- java 中有几种方法可以实现一个线程? 用什么关键字修 饰同步方法? stop()和 suspend()方法为何不推荐使用?
- 使用JS在浏览器中判断当前网络连接状态的几种方法
- 几种磁盘读写性能相关的服务器磁盘使用策略与压测方法
- EF5+MVC4系列(5) 删除的方法 1:系统推荐的先查询后remove删除的方法 2:自己new一个包含主键的类,然后 attach附加 remove删除;3:使用db.Entry 修改状态删除4:EntityState的几种状态
- 关于Entity Framework更新的几种方式以及可能遇到的问题(附加类型“Model”的实体失败,因为相同类型的其他实体已具有相同的主键值)在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为
- java中有几种方法可以实现一个线程?用什么关键字修饰同步方法 stop()和suspend()方法为何不推荐使用?