多线程的概述
- 进程
- 线程
- CPU的运作
- CPU运作时,会在当前的线程中高速随机切换执行,由于其切换的速度非常快,会让人误认为线程是同时执行的
多线程的实现方式
- 实现方式1
- 创建一个类继承Thread
- 重写Thread的run方法,将该线程要执行的内容写在run方法中
- 创建这个类的对象,调用他的start方法开启线程
class MyThread extends Thread{
@Override
public void run(){
System.out.println("线程启动");
}
}
public class Test{
public static void main(String[] args){
MyThread mt = new MyThread();
mt.start();
}
}
- 实现方式2
- 创建一个类实现Runnable接口
- 创建该类的对象
- 创建Thread类的对象,以Runnable的子类当做参数
- 调用Thread对象的start方法
class MyRunnable implements Runnable{
public void run(){
System.out.println("线程启动");
}
}
public class Test{
public static void main(String[] args){
MyRunnable mr = new MyRunnable();
Thread t = new Thread(mr);
t.start();
}
}
Thread 类的方法
Thread();
Thread(Runnable target);
Thread(Runnable target, String name)
void setName(String name);
String getName();
static Thread currentThread();
多线程的问题
- 多个线程同时操作共享数据的时候,就容易出现线程的安全问题
使用同步代码块解决多线程案例中出现的问题
死锁和线程的生命周期
- 死锁
- 出现原因
- 线程中的同步代码块的嵌套,导致了多个线程同时等待其他线程释放资源的情况
- 根本原因在于同步代码块的嵌套形成了首尾相接的情况:一个嵌套结构的外层是另一个嵌套结构的内层
- 解决方法
- 线程的生命周期