多线程(三)
来源:互联网 发布:node web 编辑:程序博客网 时间:2024/06/06 04:16
多线程3
1. interrupt()方法:中断线程
但实际上该方法不会中断正在执行的线程,只是将线程的标志位设置成true(可以用isInterrupted()方法测试该线程的中断标记,并不清除中断标记,static的方法interrupted()测试当前执行的线程是否被中断,并且在肯定的情况下,清除当前线程对象的中断标记并返回true);
如果线程在调用sleep(),join(),wait()方法时线程被中断,则这些方法会抛出InterruptedException,在catch块中捕获到这个异常时,线程的中断标志位已经被设置成false了 。
2.常用函数
public final void join()//让线程加入执行,执行某一线程join方法的线程会被冻结,等待某一线程执行结束,该线程才会恢复到可运行状态
public final boolean isAlive()
将线程标记为守护线程(后台线程):setDaemon(true); 注意该方法要在线程开启前使用。和前台线程一样开启,并抢资源运行,所不同的是,当前台线程都结束后,后台线程会自动结束。无论后台线程处于什么状态都会自动结束。
3. 线程同步通信
为避免死锁,就应该让线程在进入阻塞状态时尽量释放其锁定的资源,以为其他的线程提供运行的机会,Object类中定义了几个有用的方法:wait()、notify()、notifyAll()。
wait():被锁定的对象可以调用wait()方法,这将导致当前线程被阻塞并释放该对象的互斥锁,即解除了wait()方法当前对象的锁定状态,其他的线程就有机会访问该对象。
notify():唤醒调用wait()方法后被阻塞的线程。每次运行该方法只能唤醒一个线程。
notifyAll():唤醒所有调用wait()方法被阻塞的线程。
4. Timer和TimerTask类
java.util包中的Timer和TimerTask类也可实现多线程
Timer类实现的是类似闹钟的功能,也就是定时或者每隔一定时间间隔触发一次线程。
TimerTask类是一个抽象类,该类实现了Runnable接口,具备多线程的能力。
通过继承TimerTask类创建子类,使该子类获得多线程的能力,将需要多线程执行的代码书写在run方法内部,然后通过Timer类启动线程的执行。
5.schedule()方法
public void schedule(TimerTask task,Datetime):该方法的作用是在到达time指定的时间或已经超过该时间时执行线程task。
Date d = new Date(2009-1900,10-1,1,10,0,0);
t. schedule(task,d);
public void schedule(TimerTask task, DatefirstTime, long period):在时间到firstTime开始,每隔period毫秒就启动一次task指定的线程,这种方式会重复启动线程。
Date d = new Date(2009-1900,10-1,1,10,0,0);
t. schedule(task,d,20000);
public void schedule(TimerTask task,longdelay)在执行schedule方法delay毫秒以后启动线程task。
t.schedule(task,1000);//在执行该行启动代码1000毫秒后启动一次线程task
public void schedule(TimerTask task,longdelay,long period):在执行schedule方法delay毫秒以后启动线程task,然后每隔period毫秒重复启动线程task。
- 多线程同步(三)
- C++多线程(三)
- 多线程(三)Join
- 多线程总结(三)
- 多线程(三)
- c++多线程(三)
- c++多线程(三)
- java多线程(三)
- C++多线程(三)
- c++多线程(三)
- C#多线程(三)
- 浅谈-----多线程(三)
- 多线程三(交互)
- C++多线程(三)
- java多线程(三)
- java多线程(三)
- 多线程(三)
- C#多线程(三)
- bitmap
- 2011-08-29
- def文件 导出的函数中不要和系统中的名字冲突 比如Add
- 添加站点证书链 步骤
- 2011-09-30
- 多线程(三)
- 2011-08-31
- javascript 进度条
- ListView与RatingBar
- 2011-09-01
- list_head structure
- Unhandled exception at 0x00000000 in CallDll.exe: 0xC0000005: Access violation reading location 0x00
- 2011-09-02
- hdu 题目分类