如何使用多线程上厕所。表情包警告
在上一篇文章中,我们和以上厕所为例子,优(e)雅(xin)的解释了什么是进程、线程、多线程以及为什么使用多线程。传送门 那么这一篇文章我们就来实际的看下如何使用多线程’拉shit’。
表情包警告!!!
创建线程的方式
- 1、实现Runnable
- 2、继承Thread
有的小伙伴就要说了。为什么有两种方式呢?这个我们用一个通俗而又优雅的方式来说。
上厕所(大)有几种方式呢?
-
1、蹲着
-
2、坐着
3、站着
对吧,以上两种方式都能够解决我们的需求。
但是呢。
两种方法没有说是谁更舒服。
只是看个人习惯和场景来决定不同的方式而已,对吧。
一个人再怎么强也不可能在蹲厕坐着大便是吧。
当然,如果你可以,很好,是在下输了。
ok,我们接着回来。我们下面就先分别来看下。两种方式是如何创建线程的。
由于本篇文章右边比较多的代码解析。所以我们接下来进入正常模式。
表情包模式:off
正常模式:on
大哥你看看你的标题,还
表情包模式:off
是不是不想活了。你不知道很多人都是来看图的吗?没人看你的文章啦。
表情包模式:on
1、Runnable 创建线程
在创建线程之前,我们首先来看一下Runnable类。
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
我们可以看到Runnable
类是一个接口,并且这个接口只有一个方法run
。
那么我们使用Runnable
方法创建线程的方法就知道了
实现Runnable接口 -> 实现run方法
下面来看下具体代码
// **注意** **注意** 实际的项目中最好不要使用中文拼音和英语所结合的命名,否则会出人命
// **注意** **注意** 实际的项目中最好不要使用中文拼音和英语所结合的命名,否则会出人命
// **注意** **注意** 实际的项目中最好不要使用中文拼音和英语所结合的命名,否则会出人命
// 实现Runnable类
public class LaShit implements Runnable {
// 实现run方法,并且在run方法里面写上线程执行的操作
public void run() {
System.out.println("我 la shit 了");
}
}
经过上面的代码,我们的线程执行的内容就写好了。
但是只是定义好了执行的内容是没有作用的
我们需要让线程执行。让线程跑起来
在这里插入图片描述
这是我们需要Thread类来执行线程了。
关于Thread类是什么。我们目前只需要知道Thread是线程操作类,主管线程启动、休眠、等等等操作。随着后面的学习,我会慢慢的介绍。
下面我们看下代码。
public static void main(String[] args) {
// 创建线程实例
LaShit laShit = new LaShit();
// 创建Thread线程操作类,并且放入线程
Thread thread = new Thread(laShit);
// 开启线程
thread.start();
}
以上就是使用Runnable创建、启动线程的方法。
这里有的小伙伴就要问了。
“布丁、布丁,这样是不是太麻烦了。每次都要创建Thread类。有没有更简单的方法呢?”
还真的的有。。
下面我们看下创建线程的第二种方法。
2、继承Thread
Thread类是什么,我们上面已经说了。废话不多说,直接看代码
// 继承Thread类
public class LaShit extends Thread {
// 重写run方法,并且在run方法中写线程执行逻辑
@Override
public void run() {
System.out.println("我 La shit 了");
}
}
之前有小伙伴说使用Runnable的时候需要创建Thread然后下可以启动线程,那么我们现在继承了Thread类之后,是不是可以直接启动线程了呢?
小脑袋瓜真聪明。答案是可以的。
下面看代码。
public static void main(String[] args) {
// 创建实体
LaShit laShit = new LaShit();、
// 启动线程
laShit.start();
}
是不是感觉使用Thread创建启动线程很方便啊?
但是,是有代价的。
- 1、因为使用
Thread
是需要继承的,那么我们就无法再继承其他的类了。但是使用方便 - 2、而我们实现
Runnable
接口的同时,也可以继承或者实现其他类。但是使用麻烦。
两种方法各自适用于不用的场景。所以如何使用两种方式是要看具体的环境的。
以上就是本篇文章的所有内容了,如果有那里不正确的欢迎小伙伴们留言告诉我。谢谢!!