欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

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

时间:2022-05-19 08:56:42|栏目:JAVA代码|点击:

本文实例讲述了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程序设计有所帮助。

上一篇:Spring Cloud Stream简单用法

栏    目:JAVA代码

下一篇:Java中集合和数组的排序方式小结

本文标题:Java 线程的生命周期完整实例分析

本文地址:http://www.codeinn.net/misctech/202313.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有