Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!
当前位置: 主页 > Java文档 > Java基础相关 >

深入理解高并发编程(第1版) PDF 下载


分享到:
时间:2022-06-07 10:04来源:http://www.java1234.com 作者:转载  侵权举报
深入理解高并发编程(第1版) PDF 下载
失效链接处理
深入理解高并发编程(第1版) PDF 下载

本站整理下载:
 
相关截图:
 
主要内容:
线程的生命周期
1.生命周期
一个线程从创建,到最终的消亡,需要经历多种不同的状态,而这些不同的线程状态,由始至终也构成了线程生命周期的不同阶
段。线程的生命周期可以总结为下图。
其中,几个重要的状态如下所示。
NEW:初始状态,线程被构建,但是还没有调用start()方法。
RUNNABLE:可运行状态,可运行状态可以包括:运行中状态和就绪状态。
package io.binghe.concurrent.executor.test;
/**
* @author binghe
* @version 1.0.0
* @description 实现Runnable实现线程
*/
public class RunnableTest implements Runnable {
  @Override
  public void run() {
    //TODO 在此写在线程中执行的业务逻辑
 }
}
package io.binghe.concurrent.executor.test;
import java.util.concurrent.Callable;
/**
* @author binghe
* @version 1.0.0
* @description 实现Callable实现线程
*/
public class CallableTest implements Callable<String> {
  @Override
  public String call() throws Exception {
    //TODO 在此写在线程中执行的业务逻辑
    return null;
 }
}
BLOCKED:阻塞状态,处于这个状态的线程需要等待其他线程释放锁或者等待进入synchronized。
WAITING:表示等待状态,处于该状态的线程需要等待其他线程对其进行通知或中断等操作,进而进入下一个状态。
TIME_WAITING:超时等待状态。可以在一定的时间自行返回。
TERMINATED:终止状态,当前线程执行完毕。
2.代码示例
为了更好的理解线程的生命周期,以及生命周期中的各个状态,接下来使用代码示例来输出线程的每个状态信息。
WaitingTime
创建WaitingTime类,在while(true)循环中调用TimeUnit.SECONDS.sleep(long)方法来验证线程的TIMED_WARTING状态,代码如
下所示。
WaitingState
创建WaitingState类,此线程会在一个while(true)循环中,获取当前类Class对象的synchronized锁,也就是说,这个类无论创建多
少个实例,synchronized锁都是同一个,并且线程会处于等待状态。接下来,在synchronized中使用当前类的Class对象的wait()方
法,来验证线程的WAITING状态,代码如下所示。
BlockedThread
package io.binghe.concurrent.executor.state;
import java.util.concurrent.TimeUnit;
/**
* @author binghe
* @version 1.0.0
* @description 线程不断休眠
*/
public class WaitingTime implements Runnable{
  @Override
  public void run() {
    while (true){
      waitSecond(200);
   }
 }
  //线程等待多少秒
  public static final void waitSecond(long seconds){
    try {
      TimeUnit.SECONDS.sleep(seconds);
   } catch (InterruptedException e) {
      e.printStackTrace();
   }
 }
}
package io.binghe.concurrent.executor.state;
/**
* @author binghe
* @version 1.0.0
* @description 线程在Warting上等待
*/
public class WaitingState implements Runnable {
  @Override
  public void run() {
    while (true){
      synchronized (WaitingState.class){
        try {
          WaitingState.class.wait();
       } catch (InterruptedException e) {
          e.printStackTrace();
       }
     }
   }
 }
}
BlockedThread主要是在synchronized代码块中的while(true)循环中调用TimeUnit.SECONDS.sleep(long)方法来验证线程的
BLOCKED状态。当启动两个BlockedThread线程时,首先启动的线程会处于TIMED_WAITING状态,后启动的线程会处于BLOCKED
状态。代码如下所示。
ThreadState
启动各个线程,验证各个线程输出的状态,代码如下所示。
运行ThreadState类,如下所示。
可以看到,未输出任何结果信息。可以在命令行输入“jps”命令来查看运行的Java进程。
可以看到ThreadSate进程的进程号为28492,接下来,输入“jstack 28492”来查看ThreadSate进程栈的信息,如下所示。
package io.binghe.concurrent.executor.state;
/**
* @author binghe
* @version 1.0.0
* @description 加锁后不再释放锁
*/
public class BlockedThread implements Runnable {
  @Override
  public void run() {
    synchronized (BlockedThread.class){
      while (true){
        WaitingTime.waitSecond(100);
     }
   }
 }
}

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐