这一章,我们学习线程的创建、线程的启动、线程的名字设置、线程的休眠、线程的加入、守护线程、


一个线程是一个单独的类的对象。

想让一个普通的类变成多线程,那么这个类需要继承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-多线程入门篇的更多相关文章

  1. Java学习路径及练手项目合集

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 实验楼上的[Java 学习路径]中将首先完成 Java基础.JDK.JDBC.正则表达式等基础实验,然后进阶到 J2SE ...

  2. netty深入学习之中的一个: 入门篇

    netty深入学习之中的一个: 入门篇 本文代码下载: http://download.csdn.net/detail/cheungmine/8497549 1)Netty是什么 Netty是Java ...

  3. Java中的IO流 - 入门篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的IO流-入门篇>,希望对大家有帮助,谢谢 由于Java的IO类有很多,这就导致我刚开始学的时候,感觉很乱,每次用到都是上网搜,结果 ...

  4. Java学习路径(抛光砖)

    这就是我刚刚在五孔问答中找到的Java学习路线图抛光砖价格.我个人认为,这条Java学习路线是可以的.它是2018年相对较新的Java学习路线,更符合企业就业标准. Java学习路径的第一阶段:Jav ...

  5. Java中的集合List - 入门篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的集合List - 入门篇>,希望对大家有帮助,谢谢 简介 说实话,Java中的集合有很多种,但是这里作为入门级别,先简单介绍第一种 ...

  6. Java中的映射Map - 入门篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的映射Map - 入门篇>,希望对大家有帮助,谢谢 简介 前面介绍了集合List,这里开始简单介绍下映射Map,相关类如下图所示 正 ...

  7. Java中的集合Set - 入门篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的集合Set - 入门篇>,希望对大家有帮助,谢谢 简介 前面介绍了集合List,映射Map,最后再简单介绍下集合Set,相关类如下 ...

  8. (转载)从Java角度理解Angular之入门篇:npm, yarn, Angular CLI

    本系列从Java程序员的角度,带大家理解前端Angular框架. 本文是入门篇.笔者认为亲自动手写代码做实验,是最有效最扎实的学习途径,而搭建开发环境是学习一门新技术最需要先学会的技能,是入门的前提. ...

  9. Java学习手记2——多线程

    一.线程的概念 CPU执行程序,就好比一个人在干事情一样,同一个时间你只能做一件事情,但是这样的效率实在是太低了,在你用电脑的时候,听歌就不能浏览网页,看电影就不能下载视频,你想想是不是很蛋疼. 所以 ...

随机推荐

  1. PHP时间轴函数

    PHP时间轴函数可以更好的去进行用户体验.让用户动态的知道最近是什么时候,而不是死板的datatime去转换成固定的时间. 后续版本会考虑添加这个功能,代码先贴出来. function tranTim ...

  2. 第五章、Linux网络服务之yum仓库

    目录 一.yum仓库简介 二.yum配置文件 1yum主配置文件 2日志文件 三.yum命令详解 1查询软件包命令 2查询软件包组命令 3yum安装升级 4 软件卸载 四.搭建yum仓库 本地仓库 h ...

  3. 关于 GIN 的路由树

    GIN 是一个 golang 常用的 Web 框架,它对 API 比较友好,源码注释也很明确明确,使用起来快速灵活,还有极高的容错率.标题中的路由我们可以简单理解为在浏览器中输入的页面地址,而&quo ...

  4. RPA-UiPath视频教程1

    UiPath下载.安装.激活.第一个案例Helloworld!.参数类型.变量的介绍和使用 https://www.bilibili.com/video/av92816532 RPA直播公开课2020 ...

  5. RPA教程

    匠厂出品,必属精品   Uipath中文社区qq交流群:465630324 uipath中文交流社区:https://uipathbbs.comRPA之家qq群:465620839 第一课--UiPa ...

  6. centos7 离线升级/在线升级操作系统内核

    目录 一.前言 二.系统环境 三.系统内核下载网址 四.centos7离线升级系统内核 1.先查看系统环境 2.离线升级系统内核 五.在线升级系统内核 一.前言 CentOS(Community EN ...

  7. java请求登录接口代码示例

    前言 近期研究如何利用java代码如何获取其他系统中所需的数据,自己总结的方法如下: 1.工具类代码 /** * <pre> * 方法体说明:向远程接口发起请求,返回字符串类型结果 * @ ...

  8. android stdio开发抖音自动点赞案例

    最近做了一个安卓开发自动刷抖音. 点赞. 评论等等养号行为. 总结一下知识点和遇到的一些问题: 知识点: 1. 使用acessibility mode 对抖音自动化操作. android stdio中 ...

  9. MyBatis关联查询和懒加载错误

    MyBatis关联查询和懒加载错误 今天在写项目时遇到了个BUG.先说一下背景,前端请求更新生产订单状态,后端从前端接收到生产订单ID进行查询,然后就有问题了. 先看控制台报错: org.apache ...

  10. MySQL--排序检索数据(ORDER BY)

    检索出的数据并不是以纯粹的随机顺序显示的.如果不排序,数据一般将以它在底层表中出现的顺序显示.这可以是数据最初添加到表中的顺序.但是,如果数据后来进行过更新或删除,则此顺序将会受到MySQL重用回收存 ...