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,一经查实,立即删除!

相关文章

心灵清闲

人本质上是喜欢清闲的生活的。所谓“清闲”&#xff0c;就是在为稻梁奔波的同时&#xff0c;还有一些可以用来喝酒、聊天、旅游的时间。 细细想来&#xff0c;一个人要活的惬意&#xff0c;光有生理上的清闲是不够的&#xff0c;还得有心灵的清闲。只是一个人要抵达生理上的清…

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

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

【数据结构】KMP算法

1 KMP算法 KMP&#xff08;Knuth-Morris-Pratt&#xff09;算法是一种改进的字符串匹配算法&#xff0c;由D.E.Knuth、J.H.Morris和V.R.Pratt共同提出&#xff0c;用于在一个文本串&#xff08;主串&#xff09;中搜索一个词&#xff08;模式串&#xff09;的位置。KMP算法的关…

shell编程(四)—— 运算符

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

如何提高逻辑性?(小妙招)

在现代社会中&#xff0c;逻辑性是一种至关重要的思维能力。不论是在工作、学习还是生活中&#xff0c;逻辑清晰的人总能更好地解决问题和做出决策。然而&#xff0c;如何提高逻辑性却是许多人头疼的问题。本文将从六个方面详细探讨如何提升逻辑性&#xff0c;包括细心态度、逼…

【网络架构】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 模型 …

leetcode:67二进制求和

题目链接&#xff1a;67. 二进制求和 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:string addBinary(string a, string b) {int stralen a.size(), strblen b.size();int curtc;int Maxlen max(stralen, strblen);vector<int> stra;vector<i…

Python 学习flask创建项目

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

2024年的高考人工智能,你能把握住么?还能卷么?

背景&#xff1a; 随着国家针对人工智能出台的政策越来越多了&#xff0c;很多国企也纷纷进入了该行业进行了布局&#xff0c;就连2024这次的高考的语文作文都是人工智能。 高考作文&#xff1a;新课标I卷 阅读下面的材料&#xff0c;根据要求写作。&#xff08;60分&#xf…

【教程】在Linux系统上安装Docker和Docker Compose

介绍 Docker是一个开源的引擎&#xff0c;可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。Docker Compose是在使用Docker容器部署分布式应用时的工具&#xff0c;可以定义哪个容器运行哪个应用。使用Compose&#xff0c;你只需定义一个多容器应用的yml文件…

探讨如何实现数据同步的架构和网络协议

一、背景 (一)当前为了后端网络程序的高并发和高可用&#xff0c;总是需要多台服务器一起协调工作&#xff0c;它们可能负责不同的模块(属于分布式)&#xff0c;也可能多台提供相同的功能(属于集群)。 (二)为了解决读写分离的主从架构的数据库同步问题&#xff0c;需要数据库…

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

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

leetcode387:字符串中的第一个唯一字符

题目链接&#xff1a;387. 字符串中的第一个唯一字符 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int firstUniqChar(string s) {unordered_map<char, int> mapch;for(auto c : s){mapch[c];}for(int i 0; i < s.size(); i){if(mapch[s[i]] …

【java问答小知识6】一些Java基础的知识,用于想学习Java的小伙伴们建立一些简单的认知以及已经有经验的小伙伴的复习知识点

请解释Java中的双亲委派模型是什么&#xff1f; 回答&#xff1a;双亲委派模型是Java类加载机制的核心原则&#xff0c;它确保所有类加载器在尝试加载一个类之前&#xff0c;都会委托给它的父类加载器。 Java中的类路径&#xff08;Classpath&#xff09;是什么&#xff1f; 回…

2024.6.10 刷题总结

2024.6.10 **每日一题** 881.救生艇&#xff0c;依据题意可以看出这道题是一道贪心的题目&#xff0c;即越多地安排两个人坐一艘船更好&#xff0c;所以我们想到每次都用最小和最大的组合&#xff0c;判断是否能够合并&#xff0c;故需要先进行排序&#xff0c;然后利用双指针…

svnadmin备份和还原

背景 客户操作系统重启文件损坏&#xff0c;操作系统无法重启&#xff0c;只能恢复到之前的快照。恢复快照导致最近操作的数据丢失&#xff0c;需要进行恢复。 客户的IT任务已经把SVN数据所在盘挂到新操作系统F盘&#xff0c;试用svnadmin dump/load命令进行备份和恢复。 当…

使用 AWK 为特定行添加编号并打印

在数据处理和文件操作中&#xff0c;经常需要根据特定规则处理文本文件。在这篇博文中&#xff0c;我们将展示如何使用 AWK 这一强大的文本处理工具&#xff0c;为不以字母 A、B、C、D 开头的行添加编号并打印&#xff0c;而直接打印以这些字母开头的行。 为什么选择 AWK&…

【车载开发系列】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…