多线程知识点总结
* 一、线程概述
* 1.进程:是一个正在执行的程序。每一个进程执行都有一个执行顺序,
* 该顺序是一个执行路径,或者叫一个控制单元。
* 2.线程:就是进程中的一个独立的控制单元。线程在控制着进程的执行。
* 二、创建线程的两种方式
* 1. 创建线程的第一种方式:继承Thread类。
* 步骤:(继承-复写-调用)
* (1)定义类继承Thread类;
* (2)复写Thread类中的run方法;
* 目的:将自定义代码存储在run方法中,让线程运行。
* (3)调用线程的start方法,该方法两个作用:启动线程,调用run方法。
* 2.创建线程的第二种方式:创建Runnable接口
* 步骤:(实现接口-覆盖方法-建立对象-对象传递-调用方法)
* (1)定义类实现Runnable接口;
* (2)覆盖Runnable接口中的run方法。将线程要运行的代码存放在该run方法中;
* (3)通过Thread类建立线程对象;
* (4)将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
* (5)调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
* 三、常见面试题
* 1.实现方式和继承方式有什么区别呢?
* 答:实现方式好处:避免了单继承的局限性。在定义线程时,建议使用实现方式。
* 两种方式区别:
* 继承Thread:线程代码存放在Thread子类run方法中;
* 实现Runnable:线程代码存放在接口的子类的run方法中。
* 2.有关懒汉式
* 特点:延迟加载
* 问题:多线程访问出现安全问题
* 解决:同步代码块
* 问题:低效
* 解决:双重判断
* 同步使用的锁:该方法所在类的字节码文件对象。
* 3.start和run的区别
* d.start();//开启线程并执行该线程的run方法
* d.run();//仅仅是对象调用方法,而线程创建了,并没有运行
* 四、其他知识点
* 1.同步的前提:
* (1)必须是有两个或者两个以上的线程;
* (2)必须是多个线程使用同一个锁。
* 必须保证同步中只能有一个线程在运行。
* 2.同步代码块
* Java对于多线程的安全问题提供了专业的解决方式:同步代码块。
* synchronized(对象)
* {
* 需要被同步的代码
* }
* 3.同步函数
* 同步函数的锁是this;静态同步函数的锁是Class对象。
* 4.死锁:同步中嵌套同步
* 5.Join方法&yield方法
* (1)join:当A线程执行到了B线程的.join()方法时,A就会等待,等B线程都执行完,A才会执行。
* join可以用来临时加入线程执行。
* 一、线程概述
* 1.进程:是一个正在执行的程序。每一个进程执行都有一个执行顺序,
* 该顺序是一个执行路径,或者叫一个控制单元。
* 2.线程:就是进程中的一个独立的控制单元。线程在控制着进程的执行。
* 二、创建线程的两种方式
* 1. 创建线程的第一种方式:继承Thread类。
* 步骤:(继承-复写-调用)
* (1)定义类继承Thread类;
* (2)复写Thread类中的run方法;
* 目的:将自定义代码存储在run方法中,让线程运行。
* (3)调用线程的start方法,该方法两个作用:启动线程,调用run方法。
* 2.创建线程的第二种方式:创建Runnable接口
* 步骤:(实现接口-覆盖方法-建立对象-对象传递-调用方法)
* (1)定义类实现Runnable接口;
* (2)覆盖Runnable接口中的run方法。将线程要运行的代码存放在该run方法中;
* (3)通过Thread类建立线程对象;
* (4)将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
* (5)调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
* 三、常见面试题
* 1.实现方式和继承方式有什么区别呢?
* 答:实现方式好处:避免了单继承的局限性。在定义线程时,建议使用实现方式。
* 两种方式区别:
* 继承Thread:线程代码存放在Thread子类run方法中;
* 实现Runnable:线程代码存放在接口的子类的run方法中。
* 2.有关懒汉式
* 特点:延迟加载
* 问题:多线程访问出现安全问题
* 解决:同步代码块
* 问题:低效
* 解决:双重判断
* 同步使用的锁:该方法所在类的字节码文件对象。
* 3.start和run的区别
* d.start();//开启线程并执行该线程的run方法
* d.run();//仅仅是对象调用方法,而线程创建了,并没有运行
* 四、其他知识点
* 1.同步的前提:
* (1)必须是有两个或者两个以上的线程;
* (2)必须是多个线程使用同一个锁。
* 必须保证同步中只能有一个线程在运行。
* 2.同步代码块
* Java对于多线程的安全问题提供了专业的解决方式:同步代码块。
* synchronized(对象)
* {
* 需要被同步的代码
* }
* 3.同步函数
* 同步函数的锁是this;静态同步函数的锁是Class对象。
* 4.死锁:同步中嵌套同步
* 5.Join方法&yield方法
* (1)join:当A线程执行到了B线程的.join()方法时,A就会等待,等B线程都执行完,A才会执行。
* join可以用来临时加入线程执行。
* (2)yield:暂停当前正在执行的线程对象,并执行其他线程。