首页 > 编程语言 >复习JavaDay07

复习JavaDay07

时间:2023-05-26 10:26:04浏览次数:44  
标签:JavaDay07 复习 Thread void 线程 println new public

线程的5种状态

新生状态:Thread thread = new Thread();

就绪状态:当调用start()方法,线程立即进入就绪状态,但并不以为着立即调度执行

运行状态:进入运行状态,线程才真正执行线程体的代码块。

阻塞状态:当调用sleep(),wait或者同步锁时,线程进入阻塞状态,就是代码不往下执行

阻塞事件解除后,重新进入就绪状态,等待cpu调度执行。

死亡状态:(dead):线程中断或者结束,一旦进入死亡状态,就不能再次启动。

线程的常用方法

方法说明
setPriority(int newPriority); 更改线程优先级
static void sleep(long millis); 在指定的毫秒数内让当前正在执行的线程休眠
void join(); 等待该线程终止
static void yield(); 暂停当前正在执行的线程对象,并执行其他线程
void intrrupt(); 中断线程,别用这个方式
boolean isAlive(); 测试线程是否处于活动状态

自定义标识位结束线程:案例

不推荐使用JDK提供的stop()和destroy(),推荐线程自己停下来,设置一个变量,例如flag = false,则终止线程。

//设置标识位让线程在指定次数停止
public class TestThreadStop implements Runnable {
  private boolean flag = true;

  @Override
  public void run() {
      int i = 0;
      //这里执行循环
      while (flag) {
          System.out.println(Thread.currentThread().getName() + "运行了第" + i++ + "次");
      }
  }

  public boolean stop() {
      return this.flag = false;
  }

  public static void main(String[] args) {
      //错误示例:原因,在调用sotp方法时就需要new,和现在这个对象不是同一对象了,将陷入死循环
      //new Thread(new TestThreadWay(),"自定义线程").start();

      TestThreadStop t = new TestThreadStop();
      Thread thread = new Thread(t, "自定义线程");
      thread.start();

      //当main线程运行900次时结束掉自定义线程
      for (int i = 0; i < 1000; i++) {
          if (i == 900) {
              System.out.println(Thread.currentThread().getName()+"线程结束了====================");
              t.stop();
              break;
          }
          System.out.println("main------=========" + i);
      }
  }
}

sleep实现计时器案例:

public class TestThreadSleep implements Runnable {

  @Override
  public void run() {
      int time = 0;
      while (true) {
          try {
              Thread.sleep(1000);
              System.out.println(time++);
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
          if (time == 60) {
              System.out.println("1分钟结束,计时停止");
              break;
          }
      }

  }

  public static void main(String[] args) {
      new Thread(new TestThreadSleep()).start();
  }
}

join() 合并线程:举例线程插队

package com.softeem;

//合并线程 join()
public class TestThreadSleep implements Runnable {

  @Override
  public void run() {
      for (int i = 0; i < 100; i++) {
          System.out.println("Vip来了" + i);
      }

  }

  public static void main(String[] args) throws InterruptedException {
      TestThreadSleep t = new TestThreadSleep();
      Thread t1 = new Thread(t);
      t1.start();

      //join()方法实现线程插队,注意:执行较小任务时不适用,会存在争夺时间片问题提前插队
      for (int i = 0; i < 500; i++) {
          System.out.println("排队" + i);
          if (i == 50) {
              t1.join();
          }
      }
  }
}

标签:JavaDay07,复习,Thread,void,线程,println,new,public
From: https://www.cnblogs.com/a-sun/p/17433956.html

相关文章

  • 关于软件构造第二部分(PPT4-8)的总结复习
    一、基本数据类型、对象数据类型基本数据类型:int、long、boolean、double等,——有值,无ID,无法区分,不可变,在栈中分配内存,代价低;对象数据类型:String、Date等——有值,有ID,可为可变也可为不可变,在堆中分配内存,代价昂贵;可将基本数据类型包装为动态数据类型(首字母变大写)通常在定义集合......
  • 数据结构期末复习——图的遍历
    图的遍历:1.定义:从某个结点出发访问遍图中结点,且使每个结点仅被访问一次图的遍历具有复杂性,主要体现在以下几点1.遍历没有规定从哪个结点开始访问,因此从任意结点开始访问均可2.图的一个结点可以连接多个结点,因此无法确定访问此结点之后应该访问哪一个结点3.如果一个图中存在回......
  • 移动互联APP复习题
    一.判断题1.Android是一种操作系统但不是一种开发平台。(F)2.Intent是用于传递参数和页面的切换的组件。(T)3.Android的更新需要在主线程上执行。(T)4.无论Service是以启动方式还是绑定方式运行都要重写onBind方法(T)5.后台服务是运行在另外一个线程上的也就是所谓的子线程。(F......
  • C语言复习题
    写在前面:大家好,我是花狗Fdog,来自内蒙古的一个小城市,目前在泰州读书。很感谢能有这样一个平台让我能够在这里分享所学所感。我喜欢编程,喜欢代码,喜欢去做一个程序员。努力学习,争取多年后,给亲人更好的生活。文章目录一、选择题二、填空题三、编程题一、选择题1.源程序TEST.C经......
  • 我的软考复习笔记【中级软件设计师】
    目录内聚与耦合内聚耦合统一过程(UP)软件体系结构风格软件能力成熟度模型(CMM)集成测试策略软件测试方法黑盒测试白盒测试需求UML分类协作图的边界类控制类实体类怎么区别null用例图的关系泛化(Inheritance)扩展(extend):包含(include):快速辨认类图的符号1.关联2.泛化3.聚合组件图设......
  • 动态内存分配复习
    动态内存分配复习为什么要使用动态内存分配:在声明数组时,必须用一个编译常量指定数组长度,但是,数组的长度往往只有在运行的时候才能被确定,这是因为它所需要的内存空间取决于输入数据,但是容易浪费空间,又或者容易溢出malloc和free:malloc执行动态内存分配,free执行释放内存,当使用mal......
  • 软构复习3
    第四章数据类型与类型检验数据类型:基本数据类型:int,double,long,boolean,char;对象数据类型:String;区别: 静态类型检查:编译阶段报错,对类型的检查语法错误,类名/函数名错误,参数数目错误,参数类型错误,返回值类型错误动态类型检查:对值的报错非法的参数值,非法的返回值,越界,空指......
  • 关于软件构造第一部分(PPT0、1、3)的总结复习
     学而时习之,不亦说乎?在学习新知识的路上,我们应时时复习,总结所学知识,归纳吸收以建立自己的知识体系。故此,我现在对软件构造这门课的第一部分进行一些总结 一、软件构造的多维度视图:共有三个维度:1.按阶段划分:构造时/运行时视图,2.按动态性划分:时刻/阶段视图,3.按构造对象层次划分......
  • 复习C语言小问题
    1:强制类型转换的问题2:空间配置器的原理以及作用。3:复习C语言是支持隐式类型的转换的,但是这个转换的过程比较的“简陋”只用一个赋值运算符就完事了,但是有些类型转换是比较危险的,比如静态变量强制转换位非静态变量,因为静态变量存在寄存器中,编译器取的时候是寄存器中取得,如果用指......
  • []复习]cityengine2019/2022导入shp数据生成福田区建筑群
    时间是一把杀猪刀和人工智能比起来我太弱了.很无助.无法给自己升级系统.cityengine2019目前载入那种地区线上数据是行不通了,2022可以整一个邮箱试用一个月.https://www.esri.com/zh-cn/arcgis/products/arcgis-cityengine/trial/professionals我整了一个万能无线邮箱,无法注册,......