进程和线程
进程和多线程编程的概念及线程的优点
进程
进程是具有一定独立功能的程序、它是系统进行资源分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独立运行的一段程序。
线程
线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,但可以访问隶属于进程的资源。 在运行时,只是暂用一些计数器、寄存器和栈。
进程和线程的关系
- 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。
- 资源分配给进程,同一进程的所有线程共享该进程的所有资源。
- 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
- 处理机分给线程,即真正在处理机上运行的是线程。
- 线程是指进程内的一个执行单元,也是进程内的可调度实体。
线程的实现方式
继承Thread类
实现Runnable接口
- 突破单继承的限制
同步和异步
- 单线程一般是同步的,
- 多线程一般是异步的,线程被调用的时机是随机的
线程注意点
- 执行start()方法的顺序不代表线程启动的顺序,多线程是异步的。
- 一个线程只能调用一次start()方法,因为调用一次后线程的状态已经发生变化。
线程安全
基本概念
- 非线程安全指的是多个线程对同一个对象中的同一个实例变量进行操作时会出现值被更改、值不同步的情况,进而影响程序的执行流程。
- 线程安全指的是线程多次执行不会产生不一致的情况。
引发线程安全问题
- 多个线程同时对同一个对象中的同一个实例变量进行操作。
避免线程安全问题
- 单线程同步操作。
- 将对实例变量的操作改造为局部变量的操作。
- 多个线程同时对同一个对象中的同一个实例变量进行操作时,对临界区进行加锁处理。
了解更多 java基础:目录索引