我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java中Thread类的示例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java中Thread类的示例分析

这篇文章主要为大家展示了“Java中Thread类的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中Thread类的示例分析”这篇文章吧。

一,Thread 的几个常见属性

Thread 类是 JVM 用来管理线程的一个类,换句话说,每个线程都有一个唯一的 Thread 对象与之关联。

Java中创建线程

显示继承Thread,重写run方法来指定线程执行的代码

匿名内部类来继承Thread,重写run方法来指定线程执行的代码

显示实现Runnable接口,重写run方法

匿名内部类来继承Runnable接口,重写run方法

通过lambda表达式来描述执行的代码

属性获取方法
IDgetId()
名称getNmame()
状态getState()
优先级getPriority()
是否后台线程isDaemon()
是否存活isAlive()
是否被中断isInterrupted()

ID 是线程的唯一标识,不同线程不会重复

名称是各种调试工具用到 状态表示线程当前所处的一个情况,下面我们会进一步说明

优先级高的线程理论上来说更容易被调度到

关于后台线程,需要记住一点:JVM会在一个进程的所有非后台线程结束后,才会结束运行。

是否存活,即简单的理解,为 run 方法是否运行结束了

线程的中断问题,下面我们进一步说明

public static void main(String[] args) throws InterruptedException {        Thread t = new Thread("123"){            @Override            public void run() {                for (int i = 0; i < 10; i++){                    System.out.println(Thread.currentThread().getName());                    try{                        Thread.sleep(100);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }                System.out.println("线程退出");            }        };         //这一组属性,线程创建完成后,属性就不变了        System.out.println(t.getName());        System.out.println(t.getPriority());        System.out.println(t.isDaemon());        System.out.println(t.getId());        //这组属性会随着线程的运行而开始改变        System.out.println(t.isAlive());        System.out.println(t.isInterrupted());        System.out.println(t.getState());         t.start();         while (t.isAlive()){            System.out.println("123 正在运行");            System.out.println(t.getState());            System.out.println(t.isInterrupted());            Thread.sleep(300);        }    }

Java中Thread类的示例分析

Java中Thread类的示例分析

二,线程调试

1,启动一个线程

之前我们已经看到了如何通过覆写 run 方法创建一个线程对象,但线程对象被创建出来并不意味着线程就开始运行了。

覆写 run 方法是提供给线程要做的事情的指令清单

线程对象可以认为是把 李四、王五叫过来了

而调用 start() 方法,就是喊一声:”行动起来!“,线程才真正独立去执行了。

 static class MyThread extends Thread{        @Override        public void run() {            System.out.println("我是一个线程");        }    }     public static void main(String[] args) {        Thread t = new MyThread();        t.start();    }

2,中断一个线程

中断让一个程序结束,结束可能有两种情况

        1,已经把任务执行完了

        2,任务执行到一半,被强制结束

public static void main(String[] args) throws InterruptedException {        Thread t = new Thread(){            @Override            public void run() {               while (! isQuit){                   System.out.println("正在转账");                   try {                       Thread.sleep(500);                   } catch (InterruptedException e) {                       e.printStackTrace();                   }               }                System.out.println("转账终止");            }        };        t.start();        Thread.sleep(500);        System.out.println("有内鬼,终止交易");        isQuit = true;    }

Java中Thread类的示例分析

public static void main(String[] args) throws InterruptedException {        Thread t = new Thread(){            @Override            public void run() {                while (!Thread.interrupted()){                    System.out.println("正在转账");                    try {                        Thread.sleep(5000);                    } catch (InterruptedException e) {                        e.printStackTrace();                        break;                    }                }                System.out.println("转账终止");            }        };        t.start();        Thread.sleep(5000);        System.out.println("有内鬼,终止交易");        t.interrupt();    }

Java中Thread类的示例分析

thread 收到通知的方式有两种:

如果线程因为调用 wait/join/sleep 等方法而阻塞挂起,则以 InterruptedException 异常的形式通 知,清除中断标志

        当出现 InterruptedException 的时候, 要不要结束线程取决于 catch 中代码的写法. 可以选择 忽略这个异常, 也可以跳出循环结束线程.

否则,只是内部的一个中断标志被设置,thread 可以通过

        Thread.interrupted() 判断当前线程的中断标志被设置,清除中断标志

        Thread.currentThread().isInterrupted() 判断指定线程的中断标志被设置,不清除中断标志

这种方式通知收到的更及时,即使线程正在 sleep 也可以马上收到。

public static void main(String[] args) {        Thread t = new Thread(){            @Override            public void run() {                for (int i = 0; i < 10; i++){                    System.out.println(Thread.interrupted());                }            }        };        t.start();        t.interrupt();    }

Java中Thread类的示例分析

public static void main(String[] args) {        Thread t = new Thread(){            @Override            public void run() {                for (int i = 0; i < 10; i++){                    System.out.println(Thread.currentThread().isInterrupted());                }            }        };        t.start();        t.interrupt();    }

Java中Thread类的示例分析

3,等待一个线程

t1与t2串行执行

 public static void main(String[] args) throws InterruptedException {        Thread t1 = new Thread(){            @Override            public void run() {                for (int i = 0; i < 10; i++){                    System.out.println("我是线程1");                    try {                        Thread.sleep(50);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        };          Thread t2 = new Thread(){            @Override            public void run() {               for (int i = 0; i < 10; i++){                   System.out.println("我是线程2");                   try {                       Thread.sleep(50);                   } catch (InterruptedException e) {                       e.printStackTrace();                   }               }            }        };          t1.start();        t1.join();        t2.start();        t2.join();        System.out.println("主线程执行完毕");    }

Java中Thread类的示例分析

t1与t2并发执行

public static void main(String[] args) throws InterruptedException {        Thread t1 = new Thread(){            @Override            public void run() {                for (int i = 0; i < 10; i++){                    System.out.println("我是线程1");                    try {                        Thread.sleep(50);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        };          Thread t2 = new Thread(){            @Override            public void run() {               for (int i = 0; i < 10; i++){                   System.out.println("我是线程2");                   try {                       Thread.sleep(50);                   } catch (InterruptedException e) {                       e.printStackTrace();                   }               }            }        };          t1.start();        t2.start();        t1.join();        t2.join();        System.out.println("主线程执行完毕");    }

Java中Thread类的示例分析

4,休眠线程

public static void main(String[] args) throws InterruptedException {        System.out.println(System.currentTimeMillis());        Thread.sleep(1000);        System.out.println(System.currentTimeMillis());    }

Java中Thread类的示例分析

Java中Thread类的示例分析

1,如果线程在正常运行计算判断逻辑,此时就是在就绪队列中排队,调度器就会从就绪队列中筛选出合适的PCB让他在CPU上运行

2,如果某个线程调用sleep就会让对应的线程的PCB进入阻塞队列,阻塞队列无法在PCB上运行

3,时间到了之后,就自动把这个PCB拿回到原来的就绪队列中

以上是“Java中Thread类的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java中Thread类的示例分析

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

下载Word文档

猜你喜欢

Java中Thread类的示例分析

这篇文章主要为大家展示了“Java中Thread类的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中Thread类的示例分析”这篇文章吧。一,Thread 的几个常见属性Thre
2023-06-29

Java中String类的示例分析

这篇文章主要为大家展示了“Java中String类的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中String类的示例分析”这篇文章吧。带大家了解一下java的基础法语---S
2023-06-15

Java中类和对象的示例分析

这篇文章主要介绍了Java中类和对象的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。类可以看成是创建Java对象的模板1、类的定义public class Dog {
2023-06-25

java中EnumSet抽象类的示例分析

这篇文章主要为大家展示了“java中EnumSet抽象类的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中EnumSet抽象类的示例分析”这篇文章吧。EnumSetEnumSet
2023-05-30

Java中ClassLoader类加载的示例分析

这篇文章主要为大家展示了“Java中ClassLoader类加载的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中ClassLoader类加载的示例分析”这篇文章吧。双亲委派模型
2023-05-30

Java中类与对象的示例分析

这篇文章主要介绍Java中类与对象的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!类和对象在面向对象中,类和对象是最基本、最重要的组成单元。类实际上是表示一个客观世界某类群体的一些基本特征抽象。对象就是表示一
2023-06-20

Java之object类的示例分析

这篇文章给大家分享的是有关Java之object类的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java基类Object  java.lang.Object,Java所有类的父类,在你编写一个类的时候,
2023-05-31

java类加载的示例分析

这篇文章将为大家详细讲解有关java类加载的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、说明当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过以下三个步骤对该类进行初始化。2、
2023-06-15

C#异步多线程中Thread的示例分析

这篇文章给大家分享的是有关C#异步多线程中Thread的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Thread API这里对 Thread 的一些常用 API 进行介绍,使用一些案例进行说明。由于 T
2023-06-25

Java中File类和IO流的示例分析

这篇文章主要为大家展示了“Java中File类和IO流的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中File类和IO流的示例分析”这篇文章吧。IO流:IO流概述:IO:输入/
2023-06-29

Java内部类示例分析

这篇文章主要介绍“Java内部类示例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java内部类示例分析”文章能帮助大家解决问题。1.内部类概念及分类将一个类定义在另一个类的内部或者接口内部或者
2023-06-29

java类加载器的示例分析

这篇文章给大家分享的是有关java类加载器的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布
2023-06-14

Java类和对象的示例分析

这篇文章给大家分享的是有关Java类和对象的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、什么是类类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实
2023-06-29

Java工具类DateUtils的示例分析

这篇文章主要介绍了Java工具类DateUtils的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下import java.text.ParseExcept
2023-05-30

Java Object类和包装类的示例分析

这篇文章给大家分享的是有关Java Object类和包装类的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。查看源代码方法在IDEA中双击 shift 键,可以搜索相关类名,查看源代码点击Structure
2023-06-29

Java中引用类型和值类型的示例分析

这篇文章给大家分享的是有关Java中引用类型和值类型的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.值类型传值,引用类型传引用Demo:public class ReferDemo { //pu
2023-06-03

Java中抽象类和接口的示例分析

这篇文章主要介绍了Java中抽象类和接口的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、抽象类1.抽象类1.1抽象类的定义在Java面向对象当中,所有的对象都是用
2023-06-25

android中AsyncTask类的示例分析

这篇文章将为大家详细讲解有关android中AsyncTask类的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。AsyncTask也叫做“异步任务”,是一个抽象类 AsyncTask约定了在子
2023-05-30

Java中BeanUtils.copyProperties的示例分析

这篇文章将为大家详细讲解有关Java中BeanUtils.copyProperties的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。场景开发中经常遇到,把父类的属性拷贝到子类中。通常有2种方法:
2023-06-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录