持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
多线程基础入门
开启线程的方法有哪些?
这个问题已经是老生常谈的问题了,相信大家都可以毫不犹豫地回答出来:
- 一个类继承Thread类,并重写run()方法
- 一个类实现Runnable接口,并实现run()方法
具体代码实例:
继承Thread类:
class Test extends Thread {
@Override
public void run() {
System.out.println("Hello Thread!");
}
}
实现Runnable接口:
class Test implements Runnable {
@Override
public void run() {
System.out.println("Hello MyRun!");
}
}
到了这里,如果有一些比较想得比较偏的话,其实是由三种创造线程的方法的,两个就是上面展示的这两种方法,至于第三种方法就是利用线程池来创建线程,这样也是可以的。
不过有一点需要注意的是,虽然是使用线程池来创建线程,但是它内部的本质也是使用以上的两种方法来创建的。
线程的休眠
有些时候,咱们需要让线程先隔一段时间再继续执行,那么这个时候咱们就是可以先让线程休眠一段时间。
具体代码的实现如下所示:
new Thread(() -> {
for (int i = 0; i < 100; i++) {
System.out.println("a" + i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
线程的让出
Thread.yied()这个方法不太常用,但是作为理论技术学习,咱们还是有必要过一遍。
那么这个方法的具体功能是什么呢?它能实现什么?
其实它就是让当前正在执行的线程先让出一下cpu,自己回到操作系统的就绪队列中。
至于它让出了cpu,下面是谁在cpu运行这就是说不准的了,有可能是其他线程,但是也有可能是它自己。
为什么呢?
因为当该线程让出cpu的时候,操作系统就会发生调度,调度是根据一定的算法从就绪队列中挑选一个线程到cpu中运行;而刚刚的那个线程在让出cpu之后,就回到了就绪队列;所以操作系统有可能再次调度它,也有可能调度其他线程;这主要是由操作系统决定的。