JavaSE之多线程
多任务执行,多路径执行
-
优点:
-
提高性能
-
提高效率
-
-
进程与线程之间的区别
-
进程:系统中的程序,一个进程之间可以包含1~n个线程,系统中资源分配的最小单位,每个进程都有自己的代码与数据空间,进程之间的切换开销较大
-
程序中的顺序流,线程是cpu调度与执行的最小单位,多个线程之间共享进程的代码和数据空间,每一个线程都有自己的程序计数器运行栈,线程之间切换开销较小,一个cpu同一时刻只能调度一个线程
-
-
线程学习内容
-
-
创建线程的方式 *
-
线程的状态
-
线程安全问题 *
-
线程通信
-
-
创建线程的方式
-
继承Thread,重写run方法 + start开启线程
-
实现Runnable接口,重写run方法 + start开启线程
-
优点:接口多实现,类的单继承。实现资源共享
-
重写方法对异常抛出的要求:重写方法上抛出的异常类型<=被重写方法上异常的抛出类型
-
-
实现Callable接口,重写call方法 + 线程池
-
优点:call方法可以抛出异常,可以定义返回值,run方法不可以
-
-
-
继承Thread,重写run方法 + start开启线程
线程安全
-
定义:当多个线程同时操作同一份资源,才有可能出现线程不安全问题
-
同步锁 synchronized:有可能出现数据不安全的代码段,让多个线程排队执行
-
同步的使用
-
同步条件 : 协调多个线程排队执行的条件 -->对象的锁
-
同步的代码 : 需要多个线程排队执行的代码
-
-
synchronized用法
-
修饰方法 : 同步方法
-
同步实例方法
-
条件 : 调用成员方法的对象
-
代码范围 : 整个方法体
-
-
同步静态方法
-
条件 : 锁类->锁的类的Class对象->一个类只有一个,加载到内存中究存在Class对象,不变,唯一
-
代码范围 : 整个方法体
-
-
-
修饰块 : 同步块 synchronized(条件){ 排队执行的代码; }
-
-
注意
-
同步的代码范围太大,效率太低
-
-