JAVA 面向对象 多线程

1.进程:应用程序的执行实例,有独立的内存空间和系统资源

 进程是系统运行程序的基本单位,每一个进程的内部数据和状态都是完全独立的。

2.线程:CPU调度和分派的基本单位,进程中执行计算的最小单位,可完成一个独立的顺序控制流程

3.什么是多线程?
如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为“多线程”

4.多线程好处
充分利用CPU资源;简化编程模型;带来良好的用户体验

5.Thread类
Java提供了java.lang.Thread类支持多线程编程

6.主线程
main()方法即为主线程入口
产生其他子线程的线程
必须最后完成执行,因为它执行各种关闭动作

7.在Java中创建线程的两种方式
继承java.lang.Thread类:编写简单,可直接操作线程;适用于单继承
实现java.lang.Runnable接口:避免单继承局限性;便于共享资源

8.使用线程的步骤
定义线程——创建线程对象——启动线程——终止线程

9.线程的状态
创建状态、就绪状态、运行状态、阻塞状态、死亡状态
进程的状态:就绪状态、运行状态、等待状态

10.线程调度

线程调度指按照特定机制为多个线程分配CPU的使用权
方法 说明
setPriority(int  newPriority) 更改线程的优先级
static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠
void join() 等待该线程终止
static void yield() 暂停当前正在执行的线程对象,并执行其他线程
void interrupt() 中断线程
boolean isAlive() 测试线程是否处于活动状态

11.线程优先级

线程优先级由1~10表示,1最小,5为默认优先级
优先级高的线程获得CPU资源的概率较大

12.线程休眠

让线程暂时睡眠指定时长,线程进入阻塞状态
睡眠时间过后线程会再进入可运行状态
public static void sleep(long millis)
millis为休眠时长,以毫秒为单位
调用sleep()方法需处理InterruptedException异常

13.线程的强制运行
使当前线程暂停执行,等其他线程结束后再继续执行本线程

14.线程的礼让
暂停当前线程,允许其他具有相同优先级的线程获得运行机会
该线程处于就绪状态,不转为阻塞状态
只是提供一种可能,但是不能保证一定会实现礼让

15.多线程共享数据引发的问题

多个线程操作同一共享资源时,将引发数据不安全问题

16.同步方法

17.线程安全的类型
方法是否同步 效率比较 适合场景
线程安全 是 低 多线程并发共享资源
非线程安全 否 高 单线程

18.常见类型对比
Hashtable && HashMap
Hashtable 继承关系:实现了Map接口,Hashtable继承Dictionary类
线程安全,效率较低
键和值都不允许为null
HashMap 继承关系:实现了Map接口,继承AbstractMap类
非线程安全,效率较高
键和值都允许为null
StringBuffer && StringBuilder
前者线程安全,后者非线程安全

原文地址:https://www.cnblogs.com/zjx-959/p/13043980.html