什么是多线程?
首先操作系统有一种能力叫多任务,看起来可以在同一时间运行多个程序,实际上操作系统会为每个进程分配CPU时间片,给人并行处理的感觉。
多线程在更低一层扩展了多任务的概念:单个程序看起来在同时完成多个任务,每个任务在一个线程中执行,线程是控制线程的简称。如果一个程序可以同时运行多个线程,则称这个程序是多线程的–《java核心技术》
可以举一个例子:比如一个同学在学习的时候三心二意想着去玩游戏但是他的父母又要求他一定要学习,那么这个同学在一边学习一边想玩游戏的时候就是在实现“多线程”
用代码来实现就是
public class LearnTime {
public static void main(String[] args) {
new play().start(); // 开启多线程
for (int i = 0; i < 100; i++) {
System.out.println("我要学习!!!");
}
}
}
class play extends Thread{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("我想玩游戏");
}
}
}
在运行结果中会出现这样的情况:
这样就是简单的一个多线程程序
线程的创建方式
1. Runnable接口
2. 继承Thear类实现
3. 实现Callable接口
1.实现Runnable接口
public class TestRunnable {
public static void main(String[] args) {
// 第三步:开启线程
new Thread( new Learn()).start();
for (int i = 0; i < 20; i++) {
System.out.println("我是主线程");
}
}
}
/**
* 第一步: Learn 实现 Runnable 接口
**/
class Learn implements Runnable{
/**
* 第二步:重写run方法
*/
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("我是子线程!!");
}
}
}
由于Runnable是一个函数式接口(只有一个方法),可以使用lambda表达式创建实例
public class TestRunnable {
public static void main(String[] args) {
Runnable Learn = () ->{
for (int i = 0; i < 20; i++) {
System.out.println("我是子线程");
}
};
new Thread(Learn).start();
for (int i = 0; i < 20; i++) {
System.out.println("我是主线程");
}
}
}
2.继承Thread类
public class TextThread {
public