前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Thread 类的基本用法

Thread 类的基本用法

作者头像
用户10788736
发布2023-10-16 08:38:46
820
发布2023-10-16 08:38:46
举报
文章被收录于专栏:CSDN搬移文章CSDN搬移文章

前言

当一个程序包含多个线程并且这些线程都启动时,这些线程则是并发执行的,如:

一、获取线程实例 

 关于获取线程实例有6种方法,本文只讲解4种(基于Callable、基于线程池 本文暂时不讲解)

(一)继承Thread类

代码语言:javascript
复制
class 类名 extends Thread{
    @Override
    public void run() {
        //代码块
    }
}

(二)实现Runnable接口

代码语言:javascript
复制
class 类名 implements Runnable{
    @Override
    public void run() {
        //代码块
    }
}

(三)匿名内部类

(1)创建Tread子类对象
代码语言:javascript
复制
Thread t = new Thread(){
       @Override
       public void run() {
          //代码块
       }
};
(2)创建Runnable子类对象
代码语言:javascript
复制
Thread t = new Thread(new Runnable() {
      @Override
      public void run() {
           //执行
      }
});

(四)Lambda表达式

代码语言:javascript
复制
Thread t = new Thread(()->{
    //代码块
});

二、线程创建

线程创建又称为“线程启动”。

代码语言:javascript
复制
线程实例.start();

当start() 被执行,该线程就会启动,直到执行完毕。当线程在运行时,我们可以通过jconsole.exe文件进行查看线程运行情况:

未命名的用户创建的线程默认为Thread-0、 Thread-1、Thread-2....

三、线程中断

中断线程又名“终止线程”,是指让线程尽快结束,而不是打断线程后不让其继续进行执行。

(一)interrupt

代码语言:javascript
复制
线程实例.interrupt();

例如:

线程t 应该在执行while 死循环,但是因为main线程中出现了 t.interrupt();也就是在main线程中打断了线程t 的sleep休眠操作,使其抛出异常,继续往下执行,main线程执行完代码块之后也执行完毕,此时线程t 继续循环执行。

(二)标志位

(1)自定义标志位

如图中,count 就是一个自定义标志位。

对于多线程中的标志位,尽量使用volatile 修饰(后面的文章中会解释)。

也可以使用final修饰的常量来作为标志位,或者是不会被修改的变量。

(2)Thread 提供的标志位

Thread 提供了两个标志位,一个是成员方法,一个是静态方法。

1.Thread.currentThread().isInterrupted() (成员方法)-> 不清除标志位

2.Thread.interrupted() (静态方法)-> 清除标志位

在判断标志位时,会清除标志位

四、线程等待

代码语言:javascript
复制
线程对象.join();

public void join()

等待线程结束

public void join(long m)

等待线程结束,最多等m毫秒

public void join(long m,int n)

等待线程结束,最多等m毫秒+n纳秒

有A 、B 两个线程,希望B线程先结束,A线程后结束,在A线程中调用B.join() 。

如果B线程还没执行完,A会进入阻塞状态直到B执行完成,A再从阻塞状态恢复回来,并且继续往后执行。

五、线程休眠

代码语言:javascript
复制
Thread.sleep(1000);

sleep() 当中的单位是毫秒,该方法是Thread 的静态方法。

结语

 这篇博客如果对你有帮助,给博主一个免费的点赞以示鼓励,欢迎各位🔎点赞👍评论收藏⭐,谢谢!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、获取线程实例 
    • (一)继承Thread类
      • (二)实现Runnable接口
        • (三)匿名内部类
          • (1)创建Tread子类对象
          • (2)创建Runnable子类对象
        • (四)Lambda表达式
        • 二、线程创建
        • 三、线程中断
          • (一)interrupt
            • (二)标志位
              • (1)自定义标志位
              • (2)Thread 提供的标志位
          • 四、线程等待
          • 五、线程休眠
          • 结语
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档