线程的构造和运行

① 用Thread类构造线程对象(继承Thread类来创建并启动多线程)

package cn.sxt.thread;/*** 创建线程方式一:* 	1、创建:继承Thread+重写run* 	2、启动:创建子类对象+start* @author 1979**/public class StartThread extends Thread{/*** 线程入口点*/@Overridepublic void run() {for(int i=0;i<20;i++) {System.out.println("一边听歌");}}public static void main(String[] args) {/* 如果放在这里,那么要先敲完代码再听歌,for循环结束后才启动线程* for(int i=0;i<20;i++) {*  System.out.println("一边coding");*   }*///创建子类对象StartThread st = new StartThread();//启动st.start();//不保证立即运行   由cpu调用//st.run();//普通方法调用,只能听完歌再敲代码for(int i=0;i<20;i++) {System.out.println("一边coding");}}
}

【运行结果】

一边coding
一边coding
...
一边听歌
一边听歌
...
一边coding
一边coding

【缺点】由于java采用单继承机制,若为实现多线程而继承了Thread,将无法再继承其他类,是非常不明智的做法。

② 用Runnable辅助构造线程(实现Runnable接口创建线程类)

package cn.sxt.thread;/**** 创建线程方式二* 1、创建:实现Runnable+重写run* 2、启动:创建实现类对象+Thread对象+start* * 推荐:避免单继承的局限性,优先使用接口* 方便共享资源* @author 1979**/
public class StartRun implements Runnable{/*** 线程入口点*/@Overridepublic void run() {for(int i=0;i<20;i++) {System.out.println("一边听歌");}}public static void main(String[] args) {/* 如果放在这里,那么要先敲完代码再听歌,for循环结束后才启动线程* for(int i=0;i<20;i++) {*  System.out.println("一边coding");*   }*///创建实现类对象StartRun sr = new StartRun();//创建代理类对象Thread t = new Thread(sr);//启动t.start();//不保证立即运行   由cpu调用//st.run();//普通方法调用,只能听完歌再敲代码for(int i=0;i<20;i++) {System.out.println("一边coding");}}
}

【运行结果】

一边coding
一边coding
...
一边听歌
一边听歌
...
一边coding
一边coding
package liti_07;/*本例展现这样一种方式:利用Runnable接口直接构造线程并运行*有如下关键点:*1、希望该类中创建线程对象,就必须有线程成员,即私有变量t;*2、在构造函数中构造t引用的线程对象,注意把自己作为参数传给t;*3、还需要启动线程。由于t长设为私有,故不能直接t.start(),*      需要设置其他方法,如本例另提供一个公共的start()方法。**/
public class Ch_7_3 implements Runnable{public static void main (String[] args) {System.out.print("Main 开始");Ch_7_3 m1=new Ch_7_3(1,"奇数线程");  //注意,m1依旧不是线程对象Ch_7_3 m2=new Ch_7_3(2,"偶数线程");m1.start();                 //注意,调用的是类R自己定义的start()m2.start();System.out.print("当前共有"+ Thread.activeCount()+"个线程");System.out.print("Main 结束");}private int d;private Thread t;                   //-----新增成员public void start(){ t.start(); }        //-----关键点2 public Ch_7_3(int x, String s){d=x;//t=new Thread(this); t.setName(s);  //----关键点1t=new Thread(this,s);}public void run(){for(int i=d; i<50;i=i+2)System.out.print(" "+i);//Thread t=Thread.currentThread();  //---此句不再需要System.out.print(t.getName()+"结束!");}	
}

线程的一些常用方法

1、currentThread()

返回对当前正在执行的线程对象的引用。

2、getId()

返回此线程的标识符

3、getName()

返回此线程的名称

4、getPriority()

返回此线程的优先级

5、isAlive()

测试这个线程是否还处于活动状态。

什么是活动状态呢?

活动状态就是线程已经启动且尚未终止。线程处于正在运行或准备运行的状态。

6、sleep(long millis)

使当前正在执行的线程以指定的毫秒数“休眠”(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性。

7、interrupt()

中断这个线程。

8、interrupted() 和isInterrupted()

interrupted():测试当前线程是否已经是中断状态,执行后具有将状态标志清除为false的功能

isInterrupted(): 测试线程Thread对相关是否已经是中断状态,但不清楚状态标志

9、 setName(String name)

将此线程的名称更改为等于参数 name 。

10、isDaemon()

测试这个线程是否是守护线程。

11、setDaemon(boolean on)

将此线程标记为 daemon线程或用户线程。

12、join()

在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。

join()的作用是:“等待该线程终止”,这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行

13、yield()

yield()方法的作用是放弃当前的CPU资源,将它让给其他的任务去占用CPU时间。注意:放弃的时间不确定,可能一会就会重新获得CPU时间片。

14、setPriority(int newPriority)

更改此线程的优先级

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

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

相关文章

一个困扰数学家30多年的分类问题,终于被解决了!

来源&#xff1a;AI科技评论作者&#xff1a;Steve Nadis编译&#xff1a;陈彩娴编辑&#xff1a;青暮一般情况下&#xff0c;当你要对某个特定地区的植物进行调查时&#xff0c;你可能会按植物的种类来划分。就这种方法来看&#xff0c;如果是沿着托斯卡纳海岸的某些地带做这类…

NuGet version

https://stackoverflow.com/questions/15964935/get-nuget-exe-version-from-command-line Typing nuget help from the command line will in addition to the expected help information also list the current NuGet.exe version. 从官网下载&#xff0c;然后直接放在C:\Win…

线程的互斥与同步机制

同个人博客&#xff1a;http://tsundere-x.top/ 一、互斥 为何需要引入互斥机制&#xff1f; 当多个线程对同一数据并发读写&#xff08;至少有一个线程执行写操作&#xff09;时&#xff0c;这种情形被称为竞争。竞争会导致数据读或写的不确定性。而有时这种不确定性是不可…

欢迎参加“城市大脑与应急管理”专家研讨会

来源&#xff1a;城市大脑全球标准研究组数字大脑学术系列沙龙第二期“城市大脑与应急管理”专家研讨会2021以来城市大脑的建设与研究获得了长足发展&#xff0c;数百个城市开展了城市大脑的建设与规划&#xff0c;取得了诸多成果。于此同时&#xff0c;伴随着疫情、水灾、交通…

MapReduce词频统计

1.1 文件准备 创建本地目录和创建两个文本文件&#xff0c;在两个文件中输入单词&#xff0c;用于统计词频。 cd /usr/local/hadoop mkdir WordFile cd WordFile touch wordfile1.txt touch wordfile2.txt1.2 创建一个HDFS目录&#xff0c;在本地上不可见,并将本地文本文件上传…

炼数成金 Oracle EBS R12 DBA培训视频教程

----------------------课程目录------------------------------├01_第一课EBSDBA概要├02_第二课 EBSDBA 安装├02_第二课 R12 Linux x86 64bit installation├03_第三周 EBSDBA 架构├04_第四周EBSDBA-基本管理├05_第五周EBSDBA-OAM├06_第六周EBSDBA-sysadmin├07_第7周E…

Spring中注解大全

Spring中注解大全 Controller 标识一个该类是Spring MVC controller 处理器&#xff0c;用来创建处理http请求的对象 Controller public class TestController{RequestMapping("test")public String test(Map<String,Object> map){return "hello"…

Linux系统组成

1 系统组成 BootLoader&#xff1a;操作系统引导程序 内核&#xff1a; 文件系统&#xff1a;应用程序(用户开发的、网上下载的) 2 安装USB驱动 dongryd-linux:~$ insmod usb_dnw.ko //安装USB驱动 dongryd-linux:~$ kernel:GuoQian USB driver for DMW! //出现这一句说明驱动…

使用github托管代码以及github一些最常用的命令

生成SSH密钥 首先打开命令行工具&#xff0c;右键鼠标任意位置打开git bash here,然后输入以下命令 cd ~/.ssh 使用ssh-keygen生成密钥 ssh-keygen -t rsa -C "我的邮箱地址" 使用默认的文件名&#xff0c;输入密码&#xff0c;密钥生成成功 直接复制命令行看到的密钥…

Hive安装与配置MySQL元数据库

一.MySQL的安装 1.1 更新获取最新软件源&#xff0c;并安装MySQL。 sudo apt-get update sudo apt-get install mysql-server1.2 启动和关闭MySQL服务器。 service mysql start service mysql stop1.3 确认MySQL 是否启动成功&#xff0c;MySQL 处于LISTEN状态则表示启动成功…

国际领先的人工智能团队值得我们学习和深思

‍来源&#xff1a;陈德旺科学网博客链接地址&#xff1a;http://blog.sciencenet.cn/blog-57940-1299162.html如其说&#xff0c;人工智能&#xff08;AI&#xff09;现今热潮是Hinton等图灵奖获得者引发的&#xff0c;不如说是DeepMind&#xff08;深度思考&#xff0c;简称深…

C - 思考使用差分简化区间操作

FJs N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positive integer height (which is a bit of secret). You are told only the height H (1 ≤ H ≤ 1,000,000) of the tallest cow along with the index I of that cow. F…

Curr Biol:间隔学习可巩固记忆的奥秘

来源&#xff1a;brainnews已有一些实验现象表明当把连续的学习过程在一定时间范围内做间隔&#xff08;spaced&#xff09;后&#xff0c;学习效率将大大提高&#xff0c;这种效应称为“间隔效应”。然而迄今为止尚未有进一步的研究来探索间隔学习是如何影响与记忆相关的神经环…

Flume原理及使用案例

本文为转载篇&#xff01;原文&#xff1a; https://www.cnblogs.com/zhangyinhua/p/7803486.html https://www.cnblogs.com/ciade/p/5495218.html 原理 一、Flume简介 flume 作为 cloudera 开发的实时日志收集系统&#xff0c;受到了业界的认可与广泛应用。Flume 初始的发行版…

Hadoop相关技术

一.Hadoop 的优化与发展 1.1 局限与不足 抽象层次低&#xff0c;需要人工编码&#xff1b;表达能力有限&#xff1b;开发者自己管理作业之间的依赖关系&#xff1b;难于看到程序的整体的逻辑&#xff1b;执行迭代操作效率低;实时性差&#xff1b;资源浪费&#xff1b; 1.2 改…

网络的性能指标与分组交换网络

同个人网站&#xff1a;http://tsundere-x.top/ 计算机网络概述&#xff08;三&#xff09; 计算机网络概述&#xff08;一&#xff09; 网络协议 网络协议规定了通信双方具体的通信规则&#xff0c;包括消息的传递细节。协议的三要素&#xff1a;语法、语义、同步 语义&#…

Hadoop分布式集群安装配置

1.1 安装环境 操作系统deepin 15.11, VMware Workstation&#xff0c;hadoop 3.1.3 版本。在deepin 操作系统中安装 VMware Workstation&#xff0c;在 VMware Workstation中安装两个deepin系统&#xff0c;采用两个节点作为集群环境&#xff0c;一个作为Master节点&#xff0…

复杂性理论研究的核心问题是什么

文章来源&#xff1a;学习时报作者&#xff1a;陈一壮我曾提出复杂性理论的核心不是一般的涌现而是自组织&#xff0c;以突出其相对于传统系统论的特点。普利高津也讲到过&#xff1a;“复杂性诞生”于“物理―化学系统的自组织”。但是我又想到必须对这个自组织的概念作进一步…

【译】索引进阶(四):页和区

【译注&#xff1a;此文为翻译&#xff0c;由于本人水平所限&#xff0c;疏漏在所难免&#xff0c;欢迎探讨指正】 原文链接&#xff1a;传送门。 在之前的章节中&#xff0c;我们在有索引和没有索引的情况下执行同一个查询&#xff0c;比较了各自需要的工作。我们的最主要的评…

网络体系结构

计算机网络的体系结构 网络体系结构是从功能上描述计算机网络结构计算机网络体系结构简称网络体系结构&#xff0c;是分层结构每层遵循某个/些网络协议完成本层功能计算机网络体系结构是计算机网络各层及其协议的集合体系结构是一个计算机网络的功能层次及其关系的定义体系结构…