最近做项目,老大告诉我我们的项目每一个数据库的操作都是一个线程。懵……。之前学校学的线程都学的不太好,更不要说这种操作,那怎么办,学啊。
首先了解了一下线程是什么? (个人理解)
之前的OS中能拥有资源和独立运行的基本单位是进程,然而随着计算机发展越来越快,进程出现了很多弊端,每一次调度、切换、轮转都会有很大的开销;然而一个进程所占用的CPU资源也大,就算有多道处理机,进程的开销开始很大。这时候提出了线程,线程是比进程更小的单位。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。线程是进程中的一个实体,是被系统独立调度和分派的基本单位。总而言之,就是比进程方便,简单,轻量,更容易处理并发事物。
而多线程通俗的讲就是好多个线程一起执行,但是还是有顺序的。就比如一个小朋友有很多玩具,小朋友只能一个一个的去玩。玩具就好比是一个线程,而小孩就是一个cpu。可能他玩着不想玩了就换一个玩具,这个玩具并没有坏;等手机这个玩的没有意思了,就又换了。这就是多线程。
多线程的特点有二个:并行与并发
- 并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。
- 并发:在同一时间片段,假似同时执行,cpu可以按时间轮转执行,单核cpu同一个时刻只支持一个线程执行任务,多线程并发事实上就是多个线程排队申请调用cpu,cpu处理任务速度非常快,所以看上去多个线程任务说并发处理。
并发与并行:
- 线程安全:经常用来描绘一段代码。指在并发的情况之下,该代码经过多线程使用,线程的调度顺序不影响任何结果。这个时候使用多线程,我们只需要关注系统的内存,cpu是不是够用即可。
- 线程同步:Java中的同步指的是通过人为的控制和调度,保证共享资源的多线程访问成为线程安全,来保证结果的准确。主有是使用
@synchronized
关键字。有同步方法和同步块。
这一章 先介绍一些简单的概念,下一章正儿八经的开始。