什么是多线程
简介: 多线程是java语言的重要特性,大量应用于网络编程,服务器端程序的开发,
最常见的UI界面的底层原理,操作系统的底层原理都大量使用了多线程.
多线程的三个概念
程序(Program):是一个静态的概念,一般对应于操作系统中的一个可执行的文件
,比如:我们要启动酷狗听音乐,则对应酷狗可执行程序。当我们双击酷狗,则加载
程序到内存中,开始执行该程序,于是产生了"进程".
进程:执行中的程序叫做进程(Process),是一个动态的概念。现代的操作系统都可以同时启动多个进程。比如:我们在用酷狗听音乐,也可以使用wps写文档,也可以同时用浏览器查看网页。可以通过任务管理器查看当前的进程.
线程:是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。
注意事项
- 一个进程可拥有多个线程
- 一个进程中的多个线程共享相同的内存单元/内存地址空间,可以访问相同的变量和对象,而且他们从同一堆中分配对象并进行通信,数据交换和同步操作。
- 线程的启动,中断,消亡,消耗的资源非常少。
- 每个java程序都有一个主线程:main thread(对应main方法启动)。
- 线程的执行是由cpu进行调度的,可以设置优先级,不能设置先后执行顺序
实现线程的三种方式
实现线程的三种方式:
- 继承Thread类
- 实现Runnable接口(作者推荐使用)
- 实现Callable接口
继承Thread类
public class Tang2 extends Thread{
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("正在执行多线程"+i);
}
}
public static void main(String[] args) {
Tang2 tang =new Tang2();
tang.start();
for (int i = 0; i < 1000; i++) {
System.out.println("正在学习多线程"+i);
}
}
}
此代码执行会发现两个循环是一起执行的不会在等待run方法执行玩之后在去执行main后面的代码
当线程执行时会运行run()方法里的代码.
实现Runnable接口
public class Tang2 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("正在执行多线程"+i);
}
}
public static void main(String[] args) {
Tang2 tang =new Tang2();
new Thread(tang).start();
for (int i = 0; i < 1000; i++) {
System.out.println("正在学习多线程"+i);
}
}
}
这里可以看到不管是实现接口还是继承子类,都要去调用start方法去启动线程.
实现Callable接口
这个实现作者也还没搞会,可以去查看: