iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java 并发编程之线程挂起、恢复与终止
  • 112
分享到

Java 并发编程之线程挂起、恢复与终止

java线程挂起 2023-05-31 15:05:48 112人浏览 泡泡鱼
摘要

挂起和恢复线程    Thread 的api中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的。如果在不合适的时候挂起线程(比如,锁定共享资源时),此时便可

挂起和恢复线程

    Thread 的api中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的。如果在不合适的时候挂起线程(比如,定共享资源时),此时便可能会发生死锁条件——其他线程在等待该线程释放锁,但该线程却被挂起了,便会发生死锁。另外,在长时间计算期间挂起线程也可能导致问题。

    下面的代码演示了通过休眠来延缓运行,模拟长时间运行的情况,使线程更可能在不适当的时候被挂起:

public class DeprecatedSuspendResume extends Object implements Runnable{   //volatile关键字,表示该变量可能在被一个线程使用的同时,被另一个线程修改  private volatile int firstVal;  private volatile int secondVal;  //判断二者是否相等  public boolean areValuesEqual(){   return ( firstVal == secondVal);  }  public void run() {   try{    firstVal = 0;    secondVal = 0;    workMethod();   }catch(InterruptedException x){    System.out.println("interrupted while in workMethod()");   }  }  private void workMethod() throws InterruptedException {   int val = 1;   while (true){    stepOne(val);    stepTwo(val);    val++;    Thread.sleep(200); //再次循环钱休眠200毫秒   }  }  //赋值后,休眠300毫秒,从而使线程有机会在stepOne操作和stepTwo操作之间被挂起  private void stepOne(int newVal) throws InterruptedException{   firstVal = newVal;   Thread.sleep(300); //模拟长时间运行的情况  }  private void stepTwo(int newVal){   secondVal = newVal;  }  public static void main(String[] args){   DeprecatedSuspendResume dsr = new DeprecatedSuspendResume();   Thread t = new Thread(dsr);   t.start();   //休眠1秒,让其他线程有机会获得执行   try {    Thread.sleep(1000);}   catch(InterruptedException x){}   for (int i = 0; i < 10; i++){    //挂起线程    t.suspend();    System.out.println("dsr.areValuesEqual()=" + dsr.areValuesEqual());    //恢复线程    t.resume();    try{     //线程随机休眠0~2秒     Thread.sleep((long)(Math.random()*2000.0));    }catch(InterruptedException x){     //略    }   }   System.exit(0); //中断应用程序  } } 

--结束END--

本文标题: Java 并发编程之线程挂起、恢复与终止

本文链接: https://www.lsjlt.com/news/226500.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java 并发编程之线程挂起、恢复与终止
    挂起和恢复线程    Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的。如果在不合适的时候挂起线程(比如,锁定共享资源时),此时便可...
    99+
    2023-05-31
    java 线程 挂起
  • Java并发编程之volatile与JMM多线程内存模型
    目录一、通过程序看现象二、为什么会产生这种现象(JMM模型)?三、MESI 缓存一致性协议 一、通过程序看现象 在开始为大家讲解Java 多线程缓存模型之前,我们先看下面的这一段代码...
    99+
    2022-11-13
  • Java并发编程之volatile与JMM多线程内存模型实例分析
    本篇内容主要讲解“Java并发编程之volatile与JMM多线程内存模型实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java并发编程之volatile与JMM多线程内存模型实例分析”...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作