返回顶部
首页 > 资讯 > 精选 >Java线程中常用的操作有哪些
  • 142
分享到

Java线程中常用的操作有哪些

2023-06-30 15:06:01 142人浏览 泡泡鱼
摘要

本篇内容介绍了“Java线程中常用的操作有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!线程的常用操作设置线程名字:setName()获

本篇内容介绍了“Java线程中常用的操作有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

线程的常用操作

设置线程名字:setName()

获取线程名称:getName()

线程唯一Id:getId()

// 自定义线程名称String threadName = "threadName";// 构造方法方式Thread thread = new Thread(() -> {    System.out.println("线程名=" + Thread.currentThread().getName());},threadName);// set方法方式// thread.setName(threadName);System.out.println("线程唯一Id=" + thread.getId());

线程启动:start()

判断线程是否存活:isAlive()

// 线程启动thread.start();System.out.println("是否为存活线程=" + thread.isAlive());

线程方法:run() /call()

线程启动后会去调用的方法。线程要做什么就在run/call方法写,不需要直接调用,线程启动后自己会去调用run() /call()。如果程序没有启动线程直接调用run/call,那么就不属于多线程编程,是属于当前线程直接调用普通方法一样。

获取当前线程对象:currentThread()

操作当前线程的非static方法,得先拿到线程对象才可以

// 获取当前线程对象Thread currentThread = Thread.currentThread();// 对当前线程做一些操作System.out.println(currentThread.getName());try {    // sleep 静态方法则不需要    Thread.sleep(1000);} catch (InterruptedException e) {    e.printStackTrace();}

关于线程的状态控制(生命周期)的操作可以参考上一篇文章。

守护线程(后台线程)

普通线程(用户线程)的守护者,守护线程的任务是为其他的线程提供服务。如果进程中没有了用户线程,那么守护线程也就没有存在的意义,JVM也随之结束。典型的守护线程有JVM的垃圾回收线程,操作系统的启动也会启动各种模块的守护线程。

设置线程为守护线程:setDaeman()

注意:该方法必须在start() 方法之前调用

public static void main(String[] args) {    Thread thread = new Thread(() -> {        System.out.println("线程名="+Thread.currentThread().getName());        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        }        // 这一句不会打印出来,因为main线程(目前唯一的普通线程)等待1秒后已经结束了        System.out.println("守护线程的状态=" + Thread.currentThread().getState());    });    // 守护线程    thread.setDaemon(true);    // 线程启动    thread.start();    System.out.println("是否为守护线程=" + thread.isDaemon());}

线程串行化

执行join() 方法的线程进入等待唤醒状态(WAITING),直到调用该方法的线程结束后再由等待唤醒状态转为可运行状态(RUNNABLE)。join() 方法是Thread类中的方法,其底层是使用wait() 方法来实现线程等待,待线程isAlive()为false 时才

实现线程的串行化:一个线程调用另一个线程对象的join() 来实现线程串行化执行。

举个例子:一道好菜

public class DemoCooking {        public static void main(String[] args) {        Thread mainThread = Thread.currentThread();        // 1.买菜        Thread buyThread = new Thread(new CookingThread(mainThread,"买菜"),"buyThread");        // 2.洗菜        Thread washThread = new Thread(new CookingThread(buyThread,"洗菜"),"washThread");        // 3.切菜        Thread cutThread = new Thread(new CookingThread(washThread,"切菜"),"cutThread");        // 4.炒菜        Thread scrambleThread = new Thread(new CookingThread(cutThread,"炒菜"),"scrambleThread");        // 不受线程启动顺序的影响        scrambleThread.start();        washThread.start();        cutThread.start();        buyThread.start();                // main线程先执行完才可以开始:买菜        System.out.println("开始准备……");    }    public static class CookingThread implements Runnable{        private final Thread thread;        private final String job;        public CookingThread(Thread thread, String job){            this.thread = thread;            this.job = job;        }        @Override        public void run() {            String name = Thread.currentThread().getName()+":";            try {                thread.join();                System.out.println(name + job + "开始");                Thread.sleep(1000);                System.out.println(name + job + "结束");                Thread.sleep(1000); // 偷懒下            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}

执行结果:main > buyThread > washThread > cutThread > scrambleThread > 结束

开始准备……
buyThread:买菜开始
buyThread:买菜结束
washThread:洗菜开始
washThread:洗菜结束
cutThread:切菜开始
cutThread:切菜结束
scrambleThread:炒菜开始
scrambleThread:炒菜结束

线程优先级

设置当前线程的优先级,线程优先级越高,线程可能获得执行的次数越多,Java线程的优先级用整数表示,优先级的范围为1-10,默认为5。

setPriority(int)方法:设置线程的优先级。

getPriority方法:获取线程的优先级。

public static void main(String[] args) {    Thread thread = new Thread(() -> {        System.out.println("线程1");    });    thread.setPriority(10);    Thread thread1 = new Thread(() -> {        System.out.println("线程2");    });    thread1.setPriority(1);    thread.start();    thread1.start();    System.out.println("线程默认的优先级为=" + Thread.currentThread().getPriority());}

线程中断

使用interrupt() 方法设置线程中断标志=true,让线程受到“阻塞”时抛出一个中断信号。如果线程处于阻塞、等待唤醒或超时等待状态(Object.wait, Thread.join和Thread.sleep)时,那么它将接收到一个中断异常(InterruptedException),从而提前被结束该状态。反之,如果线程是处于“可运行”(RUNNABLE)状态,那么中断标志将没有作用。

案例一:线程中断有效

public static void main(String[] args) {    Thread thread = new Thread(() -> {        System.out.println("线程1");        try {            // 闹钟1分钟后响            Thread.sleep(60000);            System.out.println("闹钟响了");        } catch (InterruptedException e) {            // 提前退出超时等待状态            System.out.println("发生异常,提前醒了,闹钟没响手动关了");        }        System.out.println("继续执行该线程的后续程序……");    });    thread.setPriority(1);    thread.start();    thread.interrupt();    System.out.println("main线程将thread 终端状态设置为 "+thread.isInterrupted());}

执行结果:

main线程将thread 终端状态设置为 true
线程1
发生异常,提前醒了,闹钟没响手动关了
继续执行该线程的后续程序……

案例二:线程中断无效

public static void main(String[] args) {    Thread thread1 = new Thread(() -> {        System.out.println("线程" + Thread.currentThread().getName());        while (true) {            System.out.print(Thread.currentThread().getState() + "\t");        }    });    thread1.start();    thread1.interrupt();}

执行结果:线程一直打印自己的状态为RUNNABLE。

“Java线程中常用的操作有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Java线程中常用的操作有哪些

本文链接: https://lsjlt.com/news/329629.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java线程中常用的操作有哪些
    本篇内容介绍了“Java线程中常用的操作有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!线程的常用操作设置线程名字:setName()获...
    99+
    2023-06-30
  • Thread类线程常用操作有哪些
    本篇文章为大家展示了Thread类线程常用操作有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。创建线程线程是通过扩展 Thread 类创建的。扩展的 Threa...
    99+
    2024-04-02
  • C#线程操作常见的操作方法有哪些
    这篇文章主要讲解了“C#线程操作常见的操作方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#线程操作常见的操作方法有哪些”吧!C#线程操作常见的操作方法是什么呢?C#线程操作方法的...
    99+
    2023-06-17
  • 详解Java线程中常用操作
    目录线程的常用操作守护线程(后台线程)线程串行化线程优先级线程中断线程的常用操作 设置线程名字:setName() 获取线程名称:getName() 线程唯一Id:getId() /...
    99+
    2024-04-02
  • Vim中的常用操作有哪些
    这篇文章主要讲解了“Vim中的常用操作有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vim中的常用操作有哪些”吧!Vim 是 Linux 系统上的最著名的文本/代码编辑器,也是早年的 ...
    99+
    2023-06-27
  • FreeBSD中的常用操作有哪些
    这篇文章主要为大家展示了“FreeBSD中的常用操作有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“FreeBSD中的常用操作有哪些”这篇文章吧。FreeBSD 是一个适用于现代服务器、桌面...
    99+
    2023-06-27
  • java中常用的文件操作方法有哪些
    这篇文章将为大家详细讲解有关java中常用的文件操作方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。常用的文件的操作方法public class FileUtility { public stat...
    99+
    2023-06-03
  • gsettings中常用操作有哪些
    这篇文章主要为大家展示了“gsettings中常用操作有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“gsettings中常用操作有哪些”这篇文章吧。gsettings提供了对GSeting...
    99+
    2023-06-12
  • Java项目中多线程的作用有哪些
    这期内容当中小编将会给大家带来有关Java项目中多线程的作用有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.创建线程在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在...
    99+
    2023-05-31
    java 多线程
  • Java多线程常用的方法有哪些
    本文小编为大家详细介绍“Java多线程常用的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java多线程常用的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、线程相关概念程序:是为完成特定...
    99+
    2023-07-04
  • JAVA操作数组的异常有哪些
    本篇内容介绍了“JAVA操作数组的异常有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数组是程序员经常会用到的数据结构。在进行数组操作如...
    99+
    2023-06-03
  • Css常用的操作有哪些
    本篇内容主要讲解“Css常用的操作有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Css常用的操作有哪些”吧! 常见的css样式操作 单行文本溢出掩藏 ...
    99+
    2024-04-02
  • java高并发之线程的基本操作有哪些
    本篇内容介绍了“java高并发之线程的基本操作有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!新建线程新建线程很简单。只需要使用new关...
    99+
    2023-06-25
  • YARN常用操作有哪些
    这篇文章将为大家详细讲解有关YARN常用操作有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。YARN (Yet Another Resource Negotiator,另一种资源协调者)是一 种新的 ...
    99+
    2023-06-27
  • FreeBSD常用操作有哪些
    这篇“FreeBSD常用操作有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“FreeBSD常用操作有哪些”文章吧。1. ...
    99+
    2023-06-27
  • kvm常用操作有哪些
    小编给大家分享一下kvm常用操作有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!KVM (全称是 Kernel-based Virtual Machine) ...
    99+
    2023-06-28
  • Nginx常用操作有哪些
    这篇文章主要介绍“Nginx常用操作有哪些”,在日常操作中,相信很多人在Nginx常用操作有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Nginx常用操作有哪些”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-27
  • Git中常见的操作有哪些
    这篇文章给大家分享的是有关Git中常见的操作有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Git版本控制开发难题在实际开发中我们会遇到一些问题,电脑蓝屏,代码丢了,懊悔不?磁盘坏了,文件没了,懊悔不?时间长...
    99+
    2023-06-29
  • MySQL中常用指令操作有哪些
    小编给大家分享一下MySQL中常用指令操作有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!l  创建数据库:CRE...
    99+
    2024-04-02
  • MongoDB常用的Query操作有哪些
    这篇文章主要介绍MongoDB常用的Query操作有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!           ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作