[JAVA修炼之路三]-JAVA Thread 方法
2016-01-11 19:21
507 查看
一、sleep与wait方法区别
1、这两个方法来自不同的类分别是Thread和Object
2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在 任何地方使用 synchronized(x){ x.notify() //或者wait() } 4、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
二、daemon方法
java中的后台线程,是Thread实例设置了setDaemon(true),即将daemon属性设置为了true。
1、当程序中没有活动的前台线程时,后台线程会被jvm中断,退出程序,这是后台线程和普通线程的唯一区别。
2、需要注意将线程设置为daemon的时机,必须在其运行之前。
三、join方法
1、使用方式。
join是Thread类的一个方法,启动线程后直接调用,例如:?
2、为什么要用join()方法
在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。3、join方法的作用
在JDk的API里对于join()方法是:join
public final void join() throws InterruptedException Waits for this thread to die. Throws: InterruptedException - if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.即join()的作用是:“等待该线程终止”,这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。4、用实例来理解
写一个简单的例子来看一下join()的用法:1.AThread 类BThread类 TestDemo 类?打印结果:
?打印结果:
?5、从源码看join()方法
在AThread的run方法里,执行了bt.join();,进入看一下它的JDK源码:?1、针对维度,一个是对象,一个是线程。
相关文章推荐
- struts2支持的结果类型
- Java中的逆变与协变(转)
- javaweb学习总结(四十七)——监听器(Listener)在开发中的应用
- 为什么要设置Java环境变量
- 在Mac OS上安装Java以及配置环境变量的基本方法
- javaweb学习总结(四十六)——Filter(过滤器)常见应用
- javaweb学习总结(四十三)——Filter高级开发
- Java环境变量配置
- javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键
- javaweb学习总结(三十六)——使用JDBC进行批处理
- SpringMVC中用@ParamVariable传递的参数包含斜杠(/)时,匹配不了报404错误的解决方案
- (转)我对Java Serializable(序列化)的理解和总结
- javaweb学习总结(三十三)——使用JDBC对数据库进行CRUD
- java-getClass().getResource()与getClassLoader().getResource()
- java.util.Collection体系源码解读<一>Collection简介
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
- Groovy与Java集成常见的坑(转)
- Java经典23种设计模式之创造型模式(一)
- HashMap
- javaweb学习总结(十五)——JSP基础语法