全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解java线程的开始、暂停、继续

Android项目中的一个需求:通过线程读取文件内容,并且可以控制线程的开始、暂停、继续,来控制读文件。在此记录下。

直接在主线程中,通过wait、notify、notifyAll去控制读文件的线程(子线程),报错:java.lang.IllegalMonitorStateException。

需要注意的几个问题:

  1. 任何一个时刻,对象的控制权(monitor)只能被一个线程拥有。
  2. 无论是执行对象的wait、notify还是notifyAll方法,必须保证当前运行的线程取得了该对象的控制权(monitor)。
  3. 如果在没有控制权的线程里执行对象的以上三种方法,就会报错java.lang.IllegalMonitorStateException。
  4. JVM基于多线程,默认情况下不能保证运行时线程的时序性。

线程取得控制权的3种方法:

  1. 执行对象的某个同步实例方法。
  2. 执行对象对应类的同步静态方法。
  3. 执行对该对象加同步锁的同步块。

这里将开始、暂停、继续封装在线程类中,直接调用该实例的方法就行。

public class ReadThread implements Runnable{
  public Thread t;
  private String threadName;
  boolean suspended=false;
  public ReadThread(String threadName){
   this.threadName=threadName;
   System.out.println("Creating " + threadName );
  }
  public void run() {
   for(int i = 10; i > 0; i--) {
   System.out.println("Thread: " + threadName + ", " + i);
   // Let the thread sleep for a while.
   try {
    Thread.sleep(300);
    synchronized(this) {
     while(suspended) {
      wait();
     }
    }
   } catch (InterruptedException e) {
    System.out.println("Thread " + threadName + " interrupted.");
    e.printStackTrace();
   }
   System.out.println("Thread " + threadName + " exiting.");
   }
  }
  /**
   * 开始
   */
  public void start(){
   System.out.println("Starting " + threadName );
   if(t==null){
    t=new Thread(this, threadName);
    t.start();
   }
  }
  /**
   * 暂停
   */
   void suspend(){
   suspended = true;
  }
   /**
   * 继续
   */
   synchronized void resume(){
    suspended = false;
    notify();
   }
 }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# java  # 线程  # 开始  # 暂停  # 继续  # Java 线程池框架  # java 线程详解及线程与进程的区别  # Java中终止线程的三种方法  # Java多线程--让主线程等待所有子线程执行完毕在执行  # java多线程实现服务器端与多客户端之间的通信  # java 多线程-锁详解及示例代码  # Java多线程之异步Future机制的原理和实现  # 深入理解JAVA多线程之线程间的通信方式  # Java线程间的通信方式详解  # Java线程的基本概念  # 报错  # 就会  # 在此  # 就行  # 三种  # 任何一个  # 种方法  # 需要注意  # 装在  # 多线程  # 类中  # 取得了  # 情况下  # 直接调用  # ReadThread  # public  # class  # brush  # pre 


相关文章: 如何优化Golang Web性能_Golang HTTP服务器性能提升方法  专业公司网站制作公司,用什么语言做企业网站比较好?  公司网站设计制作厂家,怎么创建自己的一个网站?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何快速搭建个人网站并优化SEO?  黑客如何通过漏洞一步步攻陷网站服务器?  如何在Windows 2008云服务器安全搭建网站?  如何选择最佳自助建站系统?快速指南解析优劣  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  如何在IIS管理器中快速创建并配置网站?  广州营销型建站服务商推荐:技术优势与SEO优化解析  如何在Ubuntu系统下快速搭建WordPress个人网站?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  广平建站公司哪家专业可靠?如何选择?  建设网站制作价格,怎样建立自己的公司网站?  建站主机如何选?性能与价格怎样平衡?  如何快速搭建高效WAP手机网站吸引移动用户?  如何在IIS7上新建站点并设置安全权限?  建站主机是否等同于虚拟主机?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  如何通过cPanel快速搭建网站?  建站上传速度慢?如何优化加速网站加载效率?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  小建面朝正北,A点实际方位是否存在偏差?  如何在Tomcat中配置并部署网站项目?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  如何在橙子建站上传落地页?操作指南详解  如何用搬瓦工VPS快速搭建个人网站?  深圳网站制作培训,深圳哪些招聘网站比较好?  专业商城网站制作公司有哪些,pi商城官网是哪个?  SQL查询语句优化的实用方法总结  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何快速生成专业多端适配建站电话?  建站之星Pro快速搭建教程:模板选择与功能配置指南  如何配置FTP站点权限与安全设置?  c# 在ASP.NET Core中管理和取消后台任务  郑州企业网站制作公司,郑州招聘网站有哪些?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  网页设计网站制作软件,microsoft office哪个可以创建网页?  如何在阿里云购买域名并搭建网站?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  建站之星如何助力企业快速打造五合一网站?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何高效利用亚马逊云主机搭建企业网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。