多线程相关的概念

1,程序和进程的区别

程序是一个固定的逻辑和数据的集合,是一个静止的状态,一般存储在硬盘上。

进程是一个正在运行的程序,是一个动作的状态,一般在内存中。

2.进程和线程

进程是一个正在运行的程序,有自己独立的资源分配。

线程是一条独立的执行路径,在执行某个程序的时候,该程序可以有很多的子任务,每个线程都可以独立的完成其中一个任务。

进程是分配资源的单位,线程不会独立的分配资源,一个进程中的所有线程共享一个进程中的所有资源。

3.并发和并行

并行:多个任务(线程、进程)同时进行,需要有多个cpu,多核编程。

并发:多个任务同时发起,不能同时执行。

4.多线程的两种实现方式

(1)定义一个类继承Thread,重写run方法中的内容,创建这个类的对象,调用start方法,开启线程。

此方法的实现比较简单,但是扩展性差,耦合性高,灵活性差

(2)定义一个类实现Runnable接口,写run方法中的内容,创建这个类的对象用作任务,再调用Thread类的对象,添加任务,调用start方法,开启线程。

此方法的实现比较复杂,但是扩展性强,耦合性第,灵活性强。

并且将来还可以将任务类对象,提交到线程池中运行;任务类对象可以被不同线程运行,方便进行线程之间的数据交互。

5.多线程中线程安全的问题

(1)问题的提出:某段代码还没执行完成,cpu就被其他线程抢走,导致一些数据不完整

(2)问题的原因:没有保证代码的原子性

(3)希望:要么全部执行,要么全不执行。

(4)实现:使用同步代码块synchronized(锁对象)的方式,将需要保证全都执行的代码放在其中。非静态方法的锁对象是this,静态方法的锁对象是类的字节码文件

6.死锁

A线程需要甲资源,同时拥有乙资源。B线程需要乙资源,同时拥有甲资源。两天线程都不肯释放资源,同时又需要其他资源,导致两条线程无法运行,造成死锁

7.线程的生命周期

new:新建态

RUNNABLE:就绪态和运行态

BLOCKED:阻塞态(等待锁、I/O)

WAITING:阻塞态(调用了wait()方法,使用notify()可能被唤醒)

TIMED_WAITING:阻塞态(调用了有时间限制的wait(),sleep()方法)

TERMINATED:死亡态

posted @ 2020-07-20 20:32  阳光seawave  阅读(136)  评论(0编辑  收藏  举报