当前位置: 首页 > news >正文

Thread类的常用结构(java))

1 构造器

  • public Thread() :分配一个新的线程对象。
  • public Thread(String name) :分配一个指定名字的新的线程对象。
  • public Thread(Runnable target) :指定创建线程的目标对象,它实现了Runnable接口中的run方法
  • public Thread(Runnable target,String name) :分配一个带有指定目标新的线程对象并指定名字。

2 常用方法系列1

  • public void run() :此线程要执行的任务在此处定义代码。
  • public void start() :导致此线程开始执行; Java虚拟机调用此线程的run方法。
  • public String getName() :获取当前线程名称。
  • public void setName(String name):设置该线程名称。
  • public static Thread currentThread() :返回对当前正在执行的线程对象的引用。在Thread子类中就是this,通常用于主线程和Runnable实现类
  • public static void sleep(long millis) :使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。
  • public static void yield():yield只是让当前线程暂停一下,让系统的线程调度器重新调度一次,希望优先级与当前线程相同或更高的其他线程能够获得执行机会,但是这个不能保证,完全有可能的情况是,当某个线程调用了yield方法暂停之后,线程调度器又将其调度出来重新执行。

3 常用方法系列2

  • public final boolean isAlive():测试线程是否处于活动状态。如果线程已经启动且尚未终止,则为活动状态。

  • void join() :等待该线程终止。

    void join(long millis) :等待该线程终止的时间最长为 millis 毫秒。如果millis时间到,将不再等待。

    void join(long millis, int nanos) :等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。

  • public final void stop():已过时,不建议使用。强行结束一个线程的执行,直接进入死亡状态。run()即刻停止,可能会导致一些清理性的工作得不到完成,如文件,数据库等的关闭。同时,会立即释放该线程所持有的所有的锁,导致数据得不到同步的处理,出现数据不一致的问题。

  • void suspend() / void resume() : 这两个操作就好比播放器的暂停和恢复。二者必须成对出现,否则非常容易发生死锁。suspend()调用会导致线程暂停,但不会释放任何锁资源,导致其它线程都无法访问被它占用的锁,直到调用resume()。已过时,不建议使用。

4 常用方法系列3

每个线程都有一定的优先级,同优先级线程组成先进先出队列(先到先服务),使用分时调度策略。优先级高的线程采用抢占式策略,获得较多的执行机会。每个线程默认的优先级都与创建它的父线程具有相同的优先级。

  • Thread类的三个优先级常量:
    • MAX_PRIORITY(10):最高优先级
    • MIN _PRIORITY (1):最低优先级
    • NORM_PRIORITY (5):普通优先级,默认情况下main线程具有普通优先级。
  • public final int getPriority() :返回线程优先级
  • public final void setPriority(int newPriority) :改变线程的优先级,范围在[1,10]之间。

练习:获取main线程对象的名称和优先级。

声明一个匿名内部类继承Thread类,重写run方法,在run方法中获取线程名称和优先级。设置该线程优先级为最高优先级并启动该线程。

	public static void main(String[] args) {Thread t = new Thread(){public void run(){System.out.println(getName() + "的优先级:" + getPriority());}};t.setPriority(Thread.MAX_PRIORITY);//设置线程优先级为最高t.start();System.out.println(Thread.currentThread().getName() +"的优先级:" + 		                                          Thread.currentThread().getPriority());}

案例:

  • 声明一个匿名内部类继承Thread类,重写run方法,实现打印[1,100]之间的偶数,要求每隔1秒打印1个偶数。

  • 声明一个匿名内部类继承Thread类,重写run方法,实现打印[1,100]之间的奇数,

    • 当打印到5时,让奇数线程暂停一下,再继续。
    • 当打印到5时,让奇数线程停下来,让偶数线程执行完再打印。

public class TestThreadStateChange {public static void main(String[] args) {Thread te = new Thread() {@Overridepublic void run() {for (int i = 2; i <= 100; i += 2) {System.out.println("偶数线程:" + i);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}};te.start();Thread to = new Thread() {@Overridepublic void run() {for (int i = 1; i <= 100; i += 2) {System.out.println("奇数线程:" + i);if (i == 5) {
//                        Thread.yield(); // 就是停止现在的线程去先做优先级高的线程try {te.join();// 停止现在的线程运行} catch (InterruptedException e) {e.printStackTrace();}}}}};to.start();}
}
http://www.lryc.cn/news/98082.html

相关文章:

  • CSS :nth-child
  • 国内好用的企业级在线文档有哪些?
  • P1217 [USACO1.5] 回文质数 Prime Palindromes
  • 【STM32MP1系列】DDR内存测试用例
  • 【CAS6.6源码解析】调试Rest API接口
  • C++设计模式之模板方法、策略模式、观察者模式
  • 【计算机网络 02】物理层基本概念 传输媒体 传输方式 编码与调制 信道极限容量 章节小结
  • 无涯教程-jQuery - serialize( )方法函数
  • 一套不错的基于uniapp实现的投票类小程序/H5
  • Mac代码编辑器sublime text 4中文注册版下载
  • django------模糊查询
  • AVFoundation - 音视频组合编辑
  • jpa生成实体类,jpa根据数据库表生成实体类
  • 嵌入式Linux系统组成
  • 【iOS】—— RunLoop和多线程相关问题总结
  • 在CSDN学Golang云原生(gitlab)
  • cv2抛出异常 “install libgtk2.0-dev and pkg-config, then re-run cmake or configure”
  • C#..上位机软件的未来是什么?
  • CentOS 搭建 GitLab Git
  • 【MTK平台】【wpa_supplicant】关于wpa_supplicant_8/src/p2p/p2p_go_neg.c文件的介绍
  • win11安装appium
  • 数据科学、统计学、商业分析
  • 【多模态】18、ViLD | 通过对视觉和语言知识蒸馏来实现开集目标检测(ICLR2022)
  • 【AGI】Copilot AI编程辅助工具安装教程
  • Mac配置android studio的终端terminal
  • 第八次CCF计算机软件能力认证
  • MATLAB RANSAC平面拟合 (29)
  • 铁路关基保护新规:优先采购安全可信的网络产品和服务!
  • Kafka在大数据处理中的应用
  • Linux Day03