多线程
一.线程
1.1进程
进程就是正在运行中的程序(存在内存中)
- 是系统执行资源分配和调度的独立单位
- 每一进程都有属于自己的存储空间和系统资源
1.2线程
线程就是进程中的单个控制流,单个执行路径
- 单线程:一个进程中包含一个顺序控制流(一条执行路径)
- 多线程:一个进程中包含多个顺序控制流(多条执行路径)
- 多线程可以提高程序的处理效率
二.多线程
2.1多线程概念
多线程是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,静儿提升整体处理性能。具有这种能力的系统包括对陈多处理机、多核心处理器以及芯片级多出力或者同时多线程处理器。在一个程序中,这些独立运行的程序片段叫做“”线程,利用它编程的概念就叫做“多线程处理”。
2.2多线程优缺点
优点:
(1)用户界面可以在进行其他工作的同时CPU一直处于活动状态,可以让程序运行速度更快。
(2)占用大量处理时间的惹怒可以定期讲处理器时间让给其他任务,可以提高CPU利用率
缺点:
(1)等候使用共享资源造成程序的运行速度变慢。这些共享资源主要是独占性的资源,如打印机等,
(2)对线程进行管理要求额外的CPU开销,线程的使用会给系统带来上下文的额外负担。
(3)线程的死锁,即对共享资源加锁实现同步的过程中可能会死锁。
2.3线程的创建方式
JavaJDK中封装了线程类Thread,只需要创建这类的对象就可以创建一个线程。Thread是程序中的执行线程。Java虚拟机允许应用程序并发的运行多个执行线程。
创建线程的两种方式
1.定义一个类将这类说明声明为Thread的子类(继承自Thread类型),重写Thread中的run方法。启动当前类的实例。
@Override
public void run(){
//在这里书写这个线程需要执行的业务逻辑
for(int i = 0; i <= 10;i++){
System.out.println("输出结果"+i);
}
}
}
启动这个线程,需要一个“入口”,Java程序只有一个入口函数—main方法
public class Main {
public static void main(String[] args) {
//main方法也相当于自定义线程的run方法,且每个主函数都成为主线程。一个项目只有一个主线程
//可以在这里启动自己创建的线程类
//创建定义的MyThread的对象
MyThread mt = new MyThread();
//调用start方法
mt.start();
}
}
结果:
2.定义一个类实现Runnable接口,并覆盖run方法,需要通过Thread类的实例化传递当前这个类的对象,最后启动创建的Thread类的实例。
创建一个类实现Runnable接口,并且覆盖其中的
/**
* 这个类是runnable接口的实现类,不是线程类
*/
public class MyRunnable implements Runnable{
@Override
public void run(){
//用来书写当前启动的线程中需要执行的逻辑
for (int i = 0; i < 10; i++){
System.out.println("我是runnale实现的线程"+i);
}
}
}
在主类中创建线程对象,并将runnable的实现类对象传递到线程对象中,得到一个线程对象
public class RunnableMain {
public static void main(String[] args) {
//1.需要创建Runnable实现类的对象
MyRunnable mr= new MyRunnable();
//2.创建一个线程对象,并将Runnable对象传递到Thread对象
Thread r = new Thread(mr);
//3.使用线程类的start方法启动线程
r.start();
}
}
结果: