java —— 线程(一)

一、进程与线程

一个进程可以包含一个以上的线程,CPU 时间片切换的基本单位是线程。

二、创建线程

(一)继承 Thread 类

public class Task extends Thread{@Override                       //重写run方法public void run(){System.out.println("this is a thread");}public static void main(String[] args){Task task=new Task();task.start();}
}

(二)实现 Runnable 接口

public class Task implements Runnable{@Override                       //重写run方法public void run(){System.out.println("this is a thread");}public static void main(String[] args){Task task=new Task();Thread thread=new Thread(task);    //利用Thread的构造方法创建一个线程thread.start();}
}

(三)实现 Callable 接口 

public class Task implements Callable<String>{@Override                       //重写run方法public String call(){return "this is a thread";}public static void main(String[] args){Task task=new Task();FutureTask<String> ft=new FutureTask(task);Thread thread=new Thread(ft);    //利用Thread的构造方法创建一个线程thread.start();String x=ft.get();System.out.println(x);}
}

 除 Thread 之外,无论 Runnable 还是 Callable 都无法独立启动线程,都需要借助 Thread 才能实现线程启动。

三、获取当前线程

① 获取当前进程:Thread.currentThread()                                                       

② 获取当前进程的名称:Thread.currentThread().getName()                          

③ 设置当前进程的名称:Thread.currentThread().setName(String name)       

④ 获取当前线程的级别:Thread.currentThread().getPriority()                       

⑤ 设置当前线程的级别:Thread.currentThread().setPriority()                        

 四、run() 方法与 start() 方法的区别

run() 方法用于存放任务代码,但直接调用 run() 方法无法启动线程,只是调用了一个普通的 run 方法,因此可以调用无限次。start() 方法用于启动线程,只能启动一次,连续启动会报错,线程启动之后会自动调用 run 方法里面的任务代码。

五、线程休眠

Thread.sleep(int x)    x 表示毫秒数

六、线程让渡执行权

Thread.yield()     表示暂停当前线程,将 CPU 资源让给其他线程。这里让渡的只是一个机会,不代表当前线程一定会停止,也不代表别的线程一定会执行。

七、线程中断

① 标记线程中断的位置:.interrupt()

② 判断线程是否中断:.isInterrupted()

③ 判断线程是否中断并清除中断标志:.interrupted()   

八、将一个线程加入另一个线程

.join()

public class Task extends Thread{public static void main(String[] args){Thread th1=new Thread(){public void run(){System.out.println("1");}};Thread th2=new Thread(){public void run(){th1.join();System.out.println("2");}};th1.start();th2.start();}
}

本案例中,将线程 th1 加入到 th2 中,th2 会等待 th1 执行完毕之后再执行本任务中的代码。

九、守护线程

(一)设置守护线程

.setDaemon(true),将一个线程设置为主线程的守护线程,当主线程结束时,守护线程也会随之结束。

public class Task{public static void main(String[] args){Thread th=new Thread(){public void run(){while(true){System.out.println("123");}     //死循环输出123}};th.setDaemon(true);                     //将th设置为守护线程th.start();try {Thread.sleep(500);                 //主线程休眠500毫秒} catch (InterruptedException e) {e.printStackTrace();}}
}

本案例中,当主线程休眠500毫秒时,子线程不断输出123;主线程500毫秒结束时,主线程执行完毕,子线程随之结束。

(二)判断守护线程

.isDaemon(),如果一个线程是守护线程,返回 true;否则返回 false。

十、判断线程是否存活

.isAlive(),线程存活的时间介于启动之后,执行完毕之前,只有在这段时间内返回 true。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/851146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当前 Python 版本中所有保留字keyword.kwlist

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 当前 Python 版本中 所有保留字 keyword.kwlist [太阳]选择题 根据给定的Python代码&#xff0c;哪个选项是正确的&#xff1f; import keyword print("【执行】keyword.kwlist"…

shell编程(四)—— 运算符

和其他编程语言一样&#xff0c;bash也有多种类型的运算符&#xff0c;本篇对bash的相关运算符做简单介绍。 一、运算符 1.1 算术运算符 常见的算术运算符&#xff0c;如加&#xff08;&#xff09;、减&#xff08;-&#xff09;、乘&#xff08;*&#xff09;、除&#xf…

【网络架构】Nginx

目录 一、I/O模型 1.1 Linux 的 I/O 1.2 零拷贝技术 1.3 网络IO模型 1.3.1 阻塞型 I/O 模型&#xff08;blocking IO&#xff09;​编辑 1.3.2非阻塞型 I/O 模型 (nonblocking IO)​编辑 1.3.3 多路复用 I/O 型 ( I/O multiplexing )​编辑 1.3.4 信号驱动式 I/O 模型 …

Python 学习flask创建项目

1、使用pycharm创建flask项目 2、运行访问地址 3、可以看到访问地址内容 4、可以增加路由&#xff0c;尝试访问获取参数

智能电网与微电网:引领电力未来的创新力量

随着能源需求持续增长和环保压力日益加大&#xff0c;电力行业正面临前所未有的挑战与机遇。在这一背景下&#xff0c;智能电网和微电网作为新兴的技术应用方向&#xff0c;以其独特的优势和潜力&#xff0c;正逐步成为推动电力领域可持续发展的关键力量。 智能电网&#xff0…

【车载开发系列】MCU选型

【车载开发系列】MCU选型 【车载开发系列】MCU选型 【车载开发系列】MCU选型一. 重要概念二. MCU选型的风险风险1风险2 三. MCU选型要点四. MCU选型维度五. MCU 选型需要考虑的因素1&#xff09;ROM/RAM2&#xff09;速度/主频3&#xff09;分析外设需求4&#xff09;工作电压(…

设计模式- 责任链模式(行为型)

责任链模式 责任链模式是一种行为模式&#xff0c;它为请求创建一个接收者对象的链&#xff0c;解耦了请求的发送者和接收者。责任链模式将多个处理器串联起来形成一条处理请求的链。 图解 角色 抽象处理者&#xff1a; 一个处理请求的接口&#xff0c;可以通过设置返回值的方…

codesys【CAN总线】

1下载设备描述文件&#xff1a; 必须下载设备描述文件&#xff0c;要不然编程软件无法正确组态。 根据实际设备【品牌】去官网搜索下载。 以 DMA882-CAN 为例 CAN的设备描述文件是【.eds】的扩展名 安装设备描述文件。 2添加CAN总线&#xff1a; 1添加【CAN总线】&#xff1a…

同盾中文点选验证码识别方法

中文验证码一直是识别的难题&#xff0c;首先他分类的种类很多&#xff0c;常见中文都有3500个&#xff0c;而且一般中文验证码都会有变形&#xff0c;导致每一个文字都需要大量训练样本。假设每一个汉字样本需要100个&#xff0c;100350035万个样本&#xff0c;所以标记的样本…

excel拖拽怎么使单元格序号不递增

拖拽下来不仅不递增&#xff0c;而且右下角没有倒三角可以设置改变&#xff0c;&#xff08;即没有下图这个&#xff09; 则&#xff0c;可以采用以下方法 excel数值拖拽不递增还有一个更快更快捷的方法&#xff0c;这就运用到了excel快捷键&#xff0c;我们把鼠标放到单元格的…

IP分片的隐患,以及TCP分片

好的&#xff0c;我们来用一个生活中的例子更详细地解释 MTU、MSS&#xff0c;以及 IP 和 TCP 分片。 MTU 和 MSS 的概念 MTU&#xff08;Maximum Transmission Unit&#xff0c;最大传输单元&#xff09;&#xff1a; 假设你搬家&#xff0c;需要用卡车搬运家具。 卡车的最…

Hadoop 2.0:主流开源云架构(一)

目录 一、引例&#xff08;一&#xff09;问题概述&#xff08;二&#xff09;常规解决方案&#xff08;三&#xff09;分布式下的解决方案&#xff08;四&#xff09;小结 自从云计算的概念被提出&#xff0c;不断地有IT厂商推出自己的云计算平台&#xff0c;但它们都是商业性…

Suno小技巧大揭秘,不会这些技巧别说你懂AI音乐

Suno是一个强大的AI音乐生成工具&#xff0c;它不仅可以帮你快速生成音乐&#xff0c;还能精确地根据你的需求进行调整。无论你是音乐小白还是专业音乐人&#xff0c;这篇文章将揭示一些鲜为人知的Suno技巧&#xff0c;帮助你最大化利用这个工具的潜力。 技巧一&#xff1a;精准…

解读下/etc/network/interfaces配置文件

/etc/network/interfaces 是一个常见的网络配置文件&#xff0c;通常在 Debian 及其衍生版本的 Linux 发行版中使用。该文件用于配置网络接口和网络连接参数&#xff0c;允许用户手动设置网络连接的属性&#xff0c;包括 IP 地址、子网掩码、网关、DNS 服务器等。 以下是一个可…

基于JSP的班级同学录网站

你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;IDEA/Eclipse、Navicat、Maven 系统展示 首页 个人中心 同学录管…

51单片机独立按键控制LED灯,按键按一次亮,再按一次灭

1、功能描述 独立按键控制LED灯&#xff0c;按键按一次亮&#xff0c;再按一次灭 2、实验原理 轻触按键:相当于是一种电子开关&#xff0c;按下时开关接通&#xff0c;松开时开关断开&#xff0c;实现原理是通过轻触按键内部的金属弹片受力弹动米实现接通和断开&#xff1b;…

网络网络层之(6)ICMPv6协议

网络网络层之(6)ICMPv6协议 Author: Once Day Date: 2024年6月2日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CS…

WPF-UI布局

WPF布局元素有如下几个&#xff1a; Grid&#xff1a;网格。可以自定义行和列并通过行列的数量、行高和列宽来调整控件的布局。StackPanel&#xff1a;栈式面板。可将包含的元素在竖直或水平方向上排成一条直线&#xff0c;当移除一个元素后&#xff0c;后面的元素会自动向前移…

SpringAI(二)

大模型:具有大规模参数和复杂计算结构的机器学习模型.通常由深度神经网络构建而成,拥有数十亿甚至数千亿个参数.其设计目的在于提高模型的表达能力和预测性能,应对复杂的任务和数据. SpringAI是一个AI工程领域的应用程序框架 大概推出时间是2023年7月份(不确定) 目的是将S…

细说NLP中的Embedding层

文章目录 前言一、为什么要引入Embedding层二、Embedding层是怎么发挥作用的&#xff1f;三、感受Embedding的强大四、为什么理解Embedding的底层原理&#xff1f;总结 前言 在构建高效的自然语言处理模型时&#xff0c;Embedding层是不可或缺的组成部分。它不仅可以帮助我们捕…