Java 线程的生命周期完整实例分析

作者:cakincqm 时间:2023-06-27 12:52:26 

本文实例讲述了Java 线程的生命周期。分享给大家供大家参考,具体如下:

一 代码


/**
* @Title: ThreadStatus.java
* @Description: TODO(演示线程的生命状态)
*/
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.TimeUnit;
public class ThreadStatus
{
 private static Lock lock = new ReentrantLock();
 public static void main(String[] args)
 {
   new Thread(new TimeWaiting(), "TimeWaitingThread").start();
   new Thread(new Waiting(), "WaitingThread").start();
   // 使用两个Blocked线程,一个获取锁,一个被阻塞
   new Thread(new Blocked(), "BThread-1").start();
   new Thread(new Blocked(), "BThread-2").start();
   new Thread(new Sync(), "SyncThread-1").start();
   new Thread(new Sync(), "SyncThread-2").start();
 }
 //该线程不断地进入随眠
 static class TimeWaiting implements Runnable
 {
   public void run() {
     while (true)
     {
       try {
         TimeUnit.SECONDS.sleep(5);
         System.out.println("I am TimeWaiting Thread: "+ Thread.currentThread().getName());
       } catch (InterruptedException e) { }
     }
   }
 }
 //该线程在Waiting.class实例上等待
 static class Waiting implements Runnable
 {
   public void run( )
   {
     while (true)
     {
       synchronized (Waiting.class)
       {
         try {
           System.out.println("I am Waiting Thread: "+ Thread.currentThread().getName());
           Waiting.class.wait( );
         } catch (InterruptedException e) {
           e.printStackTrace( );
         }
       }
     }
   }
 }
 //该线程在Blocked.class实例上加锁后,不会释放该锁
 static class Blocked implements Runnable
 {
   public void run( )
   {
     synchronized (Blocked.class)
     {
       while (true)
       {
         try {
           System.out.println("I am Blocked Thread: "+ Thread.currentThread().getName());
           TimeUnit.SECONDS.sleep(5);
         } catch (InterruptedException e) {}
       }
     }
   }
 }
 //该线程用于同步锁
 static class Sync implements Runnable
 {
   public void run( ) {
     lock.lock( );
     try {
       System.out.println("I am Sync Thread: "+ Thread.currentThread().getName());
       TimeUnit.SECONDS.sleep(5);
     } catch (InterruptedException e) { }
     finally {
       lock.unlock();
     }
   }
 }
}

二 运行

I am Waiting Thread: WaitingThread
I am Blocked Thread: BThread-1
I am Sync Thread: SyncThread-1
I am TimeWaiting Thread: TimeWaitingThread
I am Blocked Thread: BThread-1
I am Sync Thread: SyncThread-2
I am TimeWaiting Thread: TimeWaitingThread
I am Blocked Thread: BThread-1
I am TimeWaiting Thread: TimeWaitingThread
I am Blocked Thread: BThread-1
I am TimeWaiting Thread: TimeWaitingThread
I am Blocked Thread: BThread-1
I am TimeWaiting Thread: TimeWaitingThread
I am Blocked Thread: BThread-1
I am TimeWaiting Thread: TimeWaitingThread
I am Blocked Thread: BThread-1
I am TimeWaiting Thread: TimeWaitingThread
I am Blocked Thread: BThread-1
I am TimeWaiting Thread: TimeWaitingThread
I am Blocked Thread: BThread-1

更多java相关内容感兴趣的读者可查看本站专题:《Java进程与线程操作技巧总结》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

来源:https://blog.csdn.net/chengqiuming/article/details/95711859

标签:Java,线程,生命周期
0
投稿

猜你喜欢

  • JavaWeb实现学生信息管理系统(2)

    2022-03-04 02:31:12
  • Android自定义dialog简单实现方法

    2021-07-29 17:10:00
  • 简单聊一聊Java线程池ThreadPoolExecutor

    2021-10-23 15:56:58
  • SpringMVC记录我遇到的坑_AOP注解无效,切面不执行的解决

    2021-08-09 06:20:58
  • 详解Java中clone的写法

    2023-09-08 17:00:43
  • SpringBoot整合Mybatis实现CRUD

    2022-01-10 09:26:45
  • 深入理解Java中观察者模式与委托的对比

    2023-10-30 18:00:03
  • Java 类与对象超基础讲解

    2023-06-12 00:03:22
  • C#实现单位换算器

    2022-04-20 07:25:55
  • 基于springboot实现redis分布式锁的方法

    2023-06-16 01:36:56
  • springboot集成springCloud中gateway时启动报错的解决

    2021-09-05 09:51:34
  • C#实现终止正在执行的线程

    2022-05-06 22:34:22
  • Java递归实现斐波那契数列

    2022-05-03 19:00:11
  • Android自定义加载圈动画效果

    2021-07-20 14:52:23
  • Android中通过view方式获取当前Activity的屏幕截图实现方法

    2021-09-20 09:17:22
  • 一文搞懂Spring循环依赖的原理

    2023-07-24 19:03:24
  • C#实现保存文件时重名自动生成新文件的方法

    2022-07-02 15:01:57
  • Android优雅地处理按钮重复点击的几种方法

    2021-11-23 05:09:14
  • Spring缓存注解@Cacheable @CacheEvit @CachePut使用介绍

    2022-06-05 01:47:14
  • JAVA注解代码详解一篇就够了

    2022-12-27 14:45:26
  • asp之家 软件编程 m.aspxhome.com