目录
前言
一、什么是多线程?
二、多线程的快速入门
三、多线程的三种创建方式
1.继承Tread类
2.实现Runnable接口
3.实现Callable接口
四、多线程的常用方法
前言
本文讲解了多线程的基础知识,针对java入门级别的读者,帮助其快速掌握并运用多线程。基础介绍帮助你快速了解多线程,快速入门帮你快速运用,处理较基础的问题,后面的篇章帮助你解决一些各种业务场景的需求,之后多线程的基础讲解系列二涉及了安全,同步,通信,线程池等知识。
一、多线程是什么?
在这里,文件的上传和下载是同时进行的,不同的文件下载是同时进行的,这就是多线程。
每个任务(无论相同还是不同)同时由一个进程进行处理就是多线程。
二、多线程的快速入门
1.代码示例
代码如下(示例):
public class Test {
public static void main(String[] args) {
MyTread myTread = new MyTread();//创建MyTread的对象
myTread.start();//调用start的方法
}
}
class MyTread extends Thread{
//重写run方法
@Override
public void run() {
//线程的功能代码
System.out.println("hello");
}
}
2.步骤讲解
首先新建一个类,并继承Thread
重写run方法,在run方法里
写线程的功能代码
在主类中创建对象
调用start方法
3.注意事项
- 新建的线程必须在mian方法的相应代码前。否则主线程代码跑完在跑新线程,无意义,等于一个线程跑。
- 主方法中必须调用start方法而不是run,调用run方法会跑实例方法,而不是开启一共线程跑run方法。
三、多线程的三种创建方式
三种方法的比较
方式 | 优点 | 缺点 |
继承Tread类 | 简单 | 无法继承其他类,无返回值 |
实现Runnable接口 | 简单,可以继承其他类 | 无返回值 |
实现Callable接口 | 可以继承,有返回值 | 代码较复杂 |
1.继承Tread类
public class Test {
public static void main(String[] args) {
MyTread myTread = new MyTread();//创建MyTread的对象
myTread.start();//调用start的方法
}
}
class MyTread extends Thread{
//重写run方法
@Override
public void run() {
//线程的功能代码
System.out.println("hello");
}
}
2.实现Runnable接口
1.第一种直接新建类实现Runnable的接口
public class Test {
public static void main(String[] args) {
Runnable runnable = new MyTread();//创建Runnacle的实例对象
new Thread(runnable).start();//把任务对象传给Thread,调用start的方法
//主线程功能代码
System.out.println("main");
}
}
//新建类实现Runnable接口
class MyTread implements Runnable{
//重写run方法
@Override
public void run() {
//线程的功能代码
System.out.println("hello");
}
}
2.第二种使用匿名内部类方法(强烈推荐)
public class Test {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
//这里写子线程的功能代码
System.out.println("我是子线程");
}
}).start();//调用start的方法
//主线程功能代码
System.out.println("main");
}
}
3.匿名内部类可以简化
public class Test {
public static void main(String[] args) {
new Thread(()->
//这里写子线程的功能代码
System.out.println("我是子线程")
).start();//调用start的方法
//主线程功能代码
System.out.println("main");
}
}
3.实现Callable接口
public class Test {
public static void main(String[] args) throws Exception {
FutureTask futureTask = new FutureTask(new MyTread());//创建一个Callable的实现类对象,通过FutureTask将该类封装成任务对象(实现Runnable)
new Thread(futureTask).start();//将任务对象交给线程对象,调用start的方法
//主线程功能代码
System.out.println("main");
//调用子线程返回值
System.out.println(futureTask.get());//返回值使用FutureTask的get方法得到
}
}
//新建类实现Callable接口 ,定义泛型,这里定义的是String
class MyTread implements Callable<String> {
@Override
public String call() throws Exception {
//功能代码
return "我是子线程";//返回相应类型值
}
}
四、多线程的常用方法 (基础)
方法 | 作用 |
String getName() | 获取当前线程的名称,默认线程名称是Thread-索引 |
void setName(String name) | 设置线程名称 |
public static Thread currentThread() | 返回对当前正在执行的线程对象的引用 |
public static void sleep(long time) | 让线程休眠指定的时间,单位为毫秒。 |
public void start() | 线程启动方法 |