线程(Thread)是程序中单一的顺序控制流程。在单个程序的同时运行多个线程完成不同工作的称为多线程。
在详细介绍线程之前,先了解进程的概念。进程是具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。简单地说,进程是程序在计算机上的一次执行活动。当你启动一个程序时,你就启动了一个进程。而什么叫多进程呢?多进程就是在操作系统中能同时运行多个任务(程序)。简单地说,在同一个时间内,一个计算机系统可以运行多个进程。比如,你在计算机上打开qq音乐听歌,同时打开网页下载网上的电视剧,又同时网上qq聊天。这些任务(程序)看起来都是同步的,相互没有干扰,互相独立执行。那么对于一个CPU而言,在某一时间上,只能执行一个程序。CPU运行的速度实在是太快了。在多个程序进行轮流执行。人眼是观察不出来的。
线程,被称为轻量级进程,是操作系统能够进行运算调度的最小单元。它是进程中一个单一顺序的控制流。所以一个进程包含至少有一个线程。多线程是进程中包含多个线程,并且在同一时间内,同时完成多项任务。多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用的效率来提高系统的效率。
线程与进程的关系和区别:进程包含线程,一个线程可以有多个线程。进程是系统进行资源分配和调度的基本单元。线程是进程的一个实体,是CPU调度和分派的基本单元。线程比进程更小,基本上不拥有资源,所以对它的调度所付出的开销就会小得多。线程与进程的区别:子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程都有自己的执行堆栈和程序计数器为其执行上下文,多线程主要是为了节约CPU时间,根据具体情况而定,线程的运行中需要使用计算机的内存资源和CPU。
2.多线程的创建
在Java中创建线程有两种方式。一种是通过继承Thread方式来实现,另一种是通过实现Runnable接口创建线程。
1)继承Thread方式创建线程。是通过一个类来继承Thread,然后这个类来重写Thread中的run方法,最后通过start方法来启动线程。并且此时这个类就是线程类。例如下面程序代码是如何通过该方式来创建线程的。
2)实现Runnable接口创建线程。是通过一个类先实现Runnable接口,然后这个类中重写Runnable中的run方法。接着在main中创建这个实例对象,并把这个实例当作Thread构造器的参数创建一个Thread的实例对象,最后调用Thread类的start方法开启线程并调用Runnable接口子类的方法创建线程。例如下面程序代码是如何通过该方式来创建线程的。
3.线程同步
先了解同步这个概念,可能会认为同步就是一起动作,其实不是,“同”的意思指协同、互相配合的意思。在Java多线程中,线程同步就是当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作,而其他线程又处于等待状态。比如,就好比两个人不能同时上同一个厕所,只有当一个人上好厕所时,另一个人才能进去。而在之前,这个人不得不在外面等待。所以Java多线程中就是需要用线程同步技术来解决,为的是避免多个线程对同一资源的访问。(www.xing528.com)
前面讲了线程同步这个概念,是为了避免多个线程对同一资源的访问。可以想象,在Java中给共享资源加一把锁,这把锁只有一把钥匙,哪个线程获取了这把钥匙,才有权访问该资源,这个锁就加在共享资源上。
Java语言中的synchronized关键字给共享资源加锁。接下来简单地介绍synchronized的用法。
用法1:synchronized可以放在方法名的前面表示该方法同步。
例如:
用法2:synchronized可以放在对象的前面表示访问该对象,只能有一个同步。
例如:
用法3:synchronized可以放在类名的前面表示该类所有方法同步。
例如:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。