Java多线程基础篇二------常用方法
来源:互联网 发布:linux 安装bcompare 编辑:程序博客网 时间:2024/06/06 09:57
上文Java多线程基础篇一介绍了java多线程中最常见的 run() start() sleep() ,
本文在简单介绍几个:
1、stop() 中断线程
粗暴的结束线程,很可能run()方法中的代码体正在执行过程中呢就被中断了。
package chc.runnable;public class StopTest {public static void main(String[] args) {Thread7 t=new Thread7();t.start();try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}t.stop();}}class Thread7 extends Thread{ public void run() { for (int i = 0; i < 100*100; i++) { System.out.println("Thread-----:"+i); } }}
2、wait notify() notifyAll() 这三个方法都是属于Object类的方法
wait()导致当前线程等待,知道其他线程调用此对象的notify() 或者 notifyAll()方法来唤醒该线程。
wait(long timeout) 导致当前线程等待直到有其他线程调用此对象的notify()或者notifyAll()方法,或者超过指定时间(参数是毫秒)。
wait(long timeout,int nanos) 这个类似于上一种方法,其中timeout还是毫秒 nanos是毫微秒,这个也是等待notify()或者notifyAll()方法唤醒 ,或者超过指定时间(指定时间=(timeout*1000000+nanos)毫微秒),可以看出,相对于上一种只是时间控制的细致了一些,估计不常用,只是API上看到了就了解一下。
notify() 唤醒在此对象监视器上等待的单个线程,如果等待线程有多个,则会选择唤醒其中一个线程进入就绪状态,选择是任意性的。
notifyAll() 当然就是唤醒此对象上的所有等待的线程使他们进入就绪状态。
3、wait()与sleep()的区别
A、首先一个最明显的区别是 wait是Object类的方法,而sleep()是Thread类的静态方法,谁调用了该方法谁去休眠,即使在a线程里调用了b线程的sleep方法,实际上还是a线程去休眠
B、比较重要的一点是sleep没有释放出锁,而wait释放了锁,是其他线程可以使用同步块资源。
sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。
C、使用范围:
wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
D、sleep需要捕获异常,而wait不需要。
- Java多线程基础篇二------常用方法
- Java多线程(二)- 常用方法
- Java多线程基础之常用方法
- Java基础-多线程的中常用方法
- JAVA多线程基础(二)
- java基础----多线程(二)
- java多线程基础二
- java多线程基础二
- java多线程-常用方法
- java多线程常用方法
- Java多线程常用方法
- JAVA学习笔记--多线程(二)线程常用方法
- java多线程常用关键字与方法介绍(二)
- java多线程编程 - 基础篇 (二)
- JAVA基础 day12 线程间通信 多线程一些常用方法
- 多线程常用方法(二)
- JAVA多线程基础(二)
- java多线程基础(二)
- java的InputStream和OutputStream的理解【转】
- MySQL Server 5.0绿色版安装方法图文教程
- 一张图让你看懂各开源License
- Quartz实例及IIS闲置超时解决方案
- Activity四种加载模式
- Java多线程基础篇二------常用方法
- Android NDK 学习
- UILabel的一些自定义用法的总结
- 开始我的技术学习之旅
- ZipBeginFileEvent.class
- C++中构造函数和析构函数避免调用虚函数的问题
- Oracle Fusion Overview
- C++内存池的实现实例
- iOS 应用程序目录结构