【Java】学习路径44-多线程入门篇
这一章,我们学习线程的创建、线程的启动、线程的名字设置、线程的休眠、线程的加入、守护线程、
一个线程是一个单独的类的对象。
想让一个普通的类变成多线程,那么这个类需要继承Thread。
创建多线程的步骤:
1、创建一个类
2、使这个类继承自Thread
3、在类中重写run方法
4、在主线程main中调用这个类的start()方法
注意:我们调用这个多线程的类是使用start()方法,而不是run()方法。
这个是我们多线程类:
public class MyThread extends Thread{
@Override
public void run(){
//--------------------
//这个是新的线程
//在这里输入线程安全的代码
//--------------------
}
}
这个是我们的main方法,我们在这里调用多线程:
public class test01_CreateThread {
public static void main(String[] args) {
MyThread MyThread_test01 = new MyThread();
//MyThread_test01.run();//错误调用方法!
MyThread_test01.start();
}
}
}
取得当前所在线程currentThread():
创建一个Thread对象,然后使用currentThread()
Thread mainThread = Thread.currentThread();
在哪个线程调用就返回哪个线程的对象。
有点类似于this.关键字的作用。
查看优先级方法getPriority():
使用Thread对象中的getPriority()方法。
getPriority()
优先级常量:
线程优先级的三个数量,默认优先级是5,最高优先级是10,最低优先值是1。
/**
* The minimum priority that a thread can have.
*/
public static final int MIN_PRIORITY = 1;
/**
* The default priority that is assigned to a thread.
*/
public static final int NORM_PRIORITY = 5;
/**
* The maximum priority that a thread can have.
*/
public static final int MAX_PRIORITY = 10;
设置优先级setPriority():
我们对线程对象使用setPriority()方法设置线程的优先度。
mainThread.setPriority(10);
参数必须确保在MIN_PRIORITY和MAX_PRIORITY之间,否则可能会抛出如下错误:
1、IllegalArgumentException – If the priority is not in the range MIN_PRIORITY to MAX_PRIORITY.
2、SecurityException – if the current thread cannot modify this thread.
创建多个多线程:
我们不可以重复调用同一个Thread对象的start()方法,否则会报错:
Exception in thread "main" java.lang.IllegalThreadStateException
我们需要重新初始化构造一个新的Thread对象。
线程名字设置:
系统会默认分配线程的名称:Thread-0、Thread-1......从0开始
我们也可以改变线程的名字,
方法一:setName()方法
thread_test01.setName("我是线程A");
方法二:为线程类添加构造方法,再使用父类的构造方法传入名字
这个是Thread类(父类)的构造方法。

我们只需要在我们的线程类中调用super()就可以将线程名字传入到Thread父类的构造方法中了。
public class Thread_Test01 extends Thread{
public Thread_Test01(){}//无参构造方法,名字由系统默认分配
public Thread_Test01(String name){//传入名字的构造方法
super(name);
}
@Override
public void run(){
}
}
线程名字的获取getName():
getName()返回String
thread_test01.setName("我是线程A");
thread_test01.getName();
线程休眠Thread.sleep():
单位是毫秒ms。作用是让线程休眠一段时间后再执行。
注意:需要添加try catch.
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
线程加入join()
例子:在main中调用t1.join();
作用:让t1线程加入到main中,合二为一,调用join之前main和t1同步执行,现在是等待t1执行完再继续执行。
注意:也需要加try catch.
概念:守护线程(Daemon Thread)
我们把一个线程设置为“守护线程”,此时这个线程就会被系统标记为“内部线程”,其生命周期就会交给JVM虚拟机系统来管理。
当其他的“非守护线程”都结束运行时,“守护线程”就会被系统自动关闭。(关闭也许需要一点点的时间)
Thread_Test01 t1 = new Thread_Test01();
t1.setDaemon(true);
中断线程:
方法一:stop(),但已被弃用。
这个方法十分暴力,只要调用了stop()方法,这个线程就会被立马销毁。
方法二:interrupt()
这个方法是官方推荐的关闭线程的方法。
但是这个方法不会真正的关闭线程。
实际上,这个方法只会修改一个内部变量---isInterrupted()
t1.isInterrupted();
当调用了interrupt()方法之后,isInterrupted()就会返回true。
我们只需要在多线程的代码中加入一个if判断,判断一下就好,如果为true,则break即可。
【Java】学习路径44-多线程入门篇的更多相关文章
- Java学习路径及练手项目合集
Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 实验楼上的[Java 学习路径]中将首先完成 Java基础.JDK.JDBC.正则表达式等基础实验,然后进阶到 J2SE ...
- netty深入学习之中的一个: 入门篇
netty深入学习之中的一个: 入门篇 本文代码下载: http://download.csdn.net/detail/cheungmine/8497549 1)Netty是什么 Netty是Java ...
- Java中的IO流 - 入门篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的IO流-入门篇>,希望对大家有帮助,谢谢 由于Java的IO类有很多,这就导致我刚开始学的时候,感觉很乱,每次用到都是上网搜,结果 ...
- Java学习路径(抛光砖)
这就是我刚刚在五孔问答中找到的Java学习路线图抛光砖价格.我个人认为,这条Java学习路线是可以的.它是2018年相对较新的Java学习路线,更符合企业就业标准. Java学习路径的第一阶段:Jav ...
- Java中的集合List - 入门篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的集合List - 入门篇>,希望对大家有帮助,谢谢 简介 说实话,Java中的集合有很多种,但是这里作为入门级别,先简单介绍第一种 ...
- Java中的映射Map - 入门篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的映射Map - 入门篇>,希望对大家有帮助,谢谢 简介 前面介绍了集合List,这里开始简单介绍下映射Map,相关类如下图所示 正 ...
- Java中的集合Set - 入门篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的集合Set - 入门篇>,希望对大家有帮助,谢谢 简介 前面介绍了集合List,映射Map,最后再简单介绍下集合Set,相关类如下 ...
- (转载)从Java角度理解Angular之入门篇:npm, yarn, Angular CLI
本系列从Java程序员的角度,带大家理解前端Angular框架. 本文是入门篇.笔者认为亲自动手写代码做实验,是最有效最扎实的学习途径,而搭建开发环境是学习一门新技术最需要先学会的技能,是入门的前提. ...
- Java学习手记2——多线程
一.线程的概念 CPU执行程序,就好比一个人在干事情一样,同一个时间你只能做一件事情,但是这样的效率实在是太低了,在你用电脑的时候,听歌就不能浏览网页,看电影就不能下载视频,你想想是不是很蛋疼. 所以 ...
随机推荐
- bitmap技术解析:redis与roaringBitmap
bitmap的表象意义是,使用一个01标识位来表示是否的状态,可以达到节省空间和高效判定的效果.在我们的实际工作中,也有着许多的应用场景,相信了解bitmap定会给你带来一些额外的收获. 1. bit ...
- 15.LNMP架构的源码编译
LNMP架构的源码编译 目录 LNMP架构的源码编译 编译安装 Nginx 服务 1.关闭防火墙 2.安装相关依赖包 3.创建运行用户 4.解压软件包及配置编译安装 5.优化路径 6.将Nginx 加 ...
- redis相关知识点
redis 的相关知识点 启动 启动代码 redis-cli -a 密码 通用命令 expire: 设置有效期 expire name 10 key key * 相关数据类型 String set:添 ...
- idea运行Tomcat出现 Address localhost:8080 is already in useAddress localhost:8080 is already in use
使用IDEA运行 tomcat时出现 Address localhost:8080 is already in use,就很奇怪,我明明只有这一个程序呀,怎么还会被占用.后来想想可能就是被其他进程占用 ...
- git stash 的一次惊心动魄的误删操作
git stash 的一次惊心动魄的误删操作 简介:行走在互联网最低端的小熊 问题--源起: 小熊和所有混迹在互联网中的开发一样,公司里面用git来管理项目,由于可能经常有几个问题要开发,要频繁在多分 ...
- django生成迁移文件和执行迁移的命令
生成迁移文件: python manage.py makemigrations #创建数据库迁移文件 执行迁移: python manage.py migrate # 根据数据库迁移文件生 ...
- 全新升级的AOP框架Dora.Interception[6]: 实现任意的拦截器注册方式
Dora.Interception提供了两种拦截器注册方式,一种是利用标注在目标类型.属性和方法上的InterceptorAttribute特性,另一种采用基于目标方法或者属性的调用表达式.通过提供的 ...
- SQL报了一个不常见的错误,让新来的实习生懵了
摘要:前些天一个很简单的SQL报了一个不常见的错误. 本文分享自华为云社区<记一次mysql关联查询格式冲突问题[五月04]>,作者: KevinQ . 问题起源 作为CRUD程序员,最常 ...
- VisionPro · C# · 加载与保存取像工具
VisionPro 项目程序设计,取像工具可被包含在工具包内被调用,一般,为了满足程序取像可以实现单次取像,循环取像,实时取像等多方面应用,会将取像工具独立打包. 加载代码: 1 using Syst ...
- 5.RDD操作综合实例
一.词频统计 A. 分步骤实现 1.准备文件 (1)下载小说或长篇新闻稿 (2)上传到hdfs上 2.读文件创建RDD 3.分词 4. ·排除大小写lower(),map() ·标点符号re.spli ...