java多线程知识点整理

java多线程知识点整理

ID:8966889

大小:45.00 KB

页数:7页

时间:2018-04-13

java多线程知识点整理_第1页
java多线程知识点整理_第2页
java多线程知识点整理_第3页
java多线程知识点整理_第4页
java多线程知识点整理_第5页
资源描述:

《java多线程知识点整理》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Java多线程知识点整理 基本概念多线程程序在较低的层次上扩展了多任务的概念:一个程序同时执行多个任务,通常,每一个任务称为一个线程,它是线程控制的简称。可以同时运行一个以上线程的程序称为多线程程序。多进程与多线程的区别:每个进程拥有自己的一整套变量,而线程则共享数据。相关接口•Runnable◦方法voidrun()◦可由Runnable对象构成Thread,不要调用Thread类或者Runable对象的run方法,直接调用run方法,只会执行同一个线程中的任务,而不会启动新的线程。应该调用Thread.start方法,这个方法将创建一个执行run方法的新线程。•Callable◦方法

2、Vcall()throwsException;◦与Runnable类似,但有返回值•Future◦方法Vget()throws…Vget(longtimeout,TimeUnitunit)throws….Voidcancle(booleanmayInterupt)//取消计算,如果已经开始根据参数判断是否中断booleanisCacelled()booleanisDone()//还在计算返回false,完成计算返回true◦保存异步计算的结果,可以启动一个计算,将future对象交给某个线程,然后忘掉它,future对象的所有者在结果计算好之后就可以获得它。◦第一个get方法的调用被阻塞

3、,直到计算完成。如果在计算完成之前,第二个方法的调用超时,抛出一个timeoutException异常,如果运行该计算的线程被中断,两个方法都将抛出interruptedException,如果计算已经完成,那么get方法立即返回。◦FutureTask包装器是一种非常便利的机制,可将Callable转换成future和Runnable,它同时实现二者的接口CallalbemyComputation=。。。;FutureTasktask=newFutureTask(myComputation);Threadt=newThread(task);t.start();.….Vresult=ta

4、sk.get();线程的状态要获得一个线程的状态,调用getState方法•新生:当用new操作创建一个新线程时,该线程还没有开始运行,这意味着它的状态是新生。•可运行:一旦调用start方法,线程处于runnable状态,记住在任何时刻,一个可运行的线程可能正在运行也可能没有运行•阻塞/等待/计时等待:当线程处于被阻塞或等待状态时,它暂时不活动。它不运行任何代码且消耗最少的资源,直到线程调度器重新激活它。1.当一个线程试图获取一个内部的对象锁,而该锁被其他线程持有,则该线程进入阻塞状态,当所有其他线程释放该锁,并且线程调度器允许本线程持有它的时候,该线程将变成非阻塞状态2.当线程等待另

5、一个线程通知调度器一个条件时,它自己进入等待状态。在调用object.wait方法或者thread.join方法,或者等待lock或condition时就会出现这种情况3.有几个方法有一个超时参数,调用它们导致线程进入计时等待状态,这一状态将一直保持到超时期满,或者接收到适当的通知。•终止:两个原因导致终止1.因为run方法正常退出而自然死亡(当线程的run方法执行方法体中最后一条语句后,并经由执行return语句返回时)2.因为一个没有捕获的异常终止了run方法而意外死亡没有一个状态叫做中断,中断方法interrupt只是用来申请,当调用该方法时,线程的中断状态被置位。每个线程都应该不

6、时地检查这个标志,以判断线程是否被中断。如果线程被阻塞,就无法检测中断状态。当一个被阻塞的线程(调用sleep或者wait)上调用interrupt方法时,阻塞调用将会被InterruptedException异常中断。被中断的线程可以决定如何响应中断。如果在中断状态被置位时调用sleep方法,它不会休眠,相反,它将清除这一状态并抛出InterruptedException。因此如果你的循环调用sleep,不会检测中断状态,应捕获InterruptException异常线程的属性•优先级:每一个线程有一个优先级,默认情况下,一个线程继承他的父线程的优先级。每当线程调度器有机会选择新线程时

7、,它首先选择具有较高优先级的线程。Yield方法导致当前执行线程处于让步状态,如果有其它的可运行线程具有至少与此线程同样高的优先级,那么这些线程接下来会被调用。•守护线程:setDaemon(true)可将线程转换为守护线程。守护线程应该永远不去访问固定资源,如文件,数据库,因为它会在任何时刻甚至在一个操作的中间发生中断。同步•锁对象ReentrantLock◦结构:myLock.lock();try{}finally{myLock

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。