第一章:java多线程技能
在学习线程之前我们首先要清楚一下
进程的概念:
进程是操作系统结构的基础,是系统进行资源分配的和调度的独立单位。windows上一个运行的word,一个浏览器程序就称之为一个进程。
线程:线程是进程的一部分,一个进程由一个或多个线程组成,线程可以理解为进程中独立运行的子任务,如QQ在运行时就有很多子任务同时运行,再如,好友视频线程,下载线程,传输数据线程,这些不同的任务或功能都有可以同时运行。
多线程的优势
:可以充分的利用计算机cpu的资源。相较于单任务环境,多线程可以来回在多个线程任务间进行切换,避免了在单任务环境下某个任务等待自己所期待的事件而不能运行时长时间的占用cpu.
在java中要实现线程有两种方式
:一种是继承Thread类,一种是实现Runnable接口,这两种方式都需要实现run方法,线程的执行就是执行从执行run方法开始的。由于java是单继承的所以一般而言,在使用中用到实现Runnablea接口较多,因为同时可以实现继承。Thread类也是实现Runnable接口的。启用线程需要调用线程的start()方法,这是唯一的启动线程的方式。
线程的执行
:线程的执行是未知的,意思就是说我们无法知道线程什么时候开始,什么时候结束。当启动线程以后,线程的执行就不归我们管了,并且每一个线程执行启动一次,即只能调用一次start()方法。
构造方法
:Thread(),Thread(Runnable target);由此可见我们可以通过线程的通过构造方法给线程传递另一个线程,这样我们就可以在线程的内部去调用另一个线程。
非线程安全:当多个线程之间存在共享的对象是就有可能出现运行错误。
currentThread()方法:该方法可返回代码段正在被哪个线程调用的信息;例如currentThread().getName()返回当前线程名称。
isAlive()方法判读线程是否处于活动状态。
sleep(long mills)的线程暂停执行一定的时间。
getId()取得线程的唯一标识。
stop()方法强制停止线程。不过已经过时。此方法有可能让程序出现意外的错误。
通常停止线程,采用的是interrupt()方法;但是此方法并不会真正的停止线程的执行,只是在线程中添加了一个停止的标记,需要加入一个判读才能让线程停止。
interrupted()方法测试当前线程是否已经中断,如果调用该方法时线程已经中断,则此方法返回true,并且此方法会解除中断状态。所以当第二次调用该方法时会返回false;
isInterrupted()方法测试线程是否中断但是不清除中断状态。
如果要停止一个线程:我们先调用interrupt()方法,然后用isInterrupted()方法判断线程是否中断,如果中断则用return方法返回。
在沉睡中停止线程,会使线程抛出异常,并清除停止状态。
suspend()方法暂停线程;此方法可能导致线程挂起并永久的持有公共对象,导致其他线程无法获得对象进行执行。
resume()方法恢复线程执行;
yield()方法作用是放弃当前线程的CPU资源。让给其他线程执行,但是放弃的时间不确定有可能刚放弃,马上又获得CPU时间片。
java中线程的优先级有十级,1到10,数字越大优先级越高,可以通过setPriority()进行设置,优先级越高的线程有更多的机会获得cpu进行执行。