黑马程序员---线程间通信、停止线程等

来源:互联网 发布:软件图标显示异常 编辑:程序博客网 时间:2024/05/17 04:01

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------

1、线程间通信:

其实就是多个线程在操作同一个资源,但是操作的动作不同。

wait;  notify();   notifyAll();

都使用在同步中,因为要对持有监视器(锁)的线程操作。所以要使用在同步中,因为只有同步才具有锁。

为什么这些操作线程的方法要定义在Object类中呢?

因为这些方法在操作同步中的线程时,都必须要标识它们所操作线程的锁,只有同一个锁上的被等待线程,可以被同一个锁上notify唤醒。不可以对不同锁中的线程进行唤醒。

也就是说,等待和唤醒必须是同一个锁。而锁可以是任意对象,所以可以被任意对象调用的方法定义在Object类中。

JDK1.5中提供了多线程升级解决方案。

将同步Synchronized替换成现实Lock操作。将Object中的wait,notify,notifyAll,替换了condition对象。该对象可以Lock锁,进行获取。

释放锁的动作一定要执行。 

2、停止线程

stop方法已经过时,那么如何停止线程呢?

只有一种方法,那就是run方法结束。

开启多线程运行,运行代码通常都是循环结构,只要控制住循环,就可以让run方法结束,也就是线程结束。

特殊情况:当线程处于冻结状态,就不会读取到标记,那么线程就不会结束。

面对这种特殊情况,当没有指定的方式让冻结的线程恢复到运行状态时,这时就需要对冻结进行清除。强制线程恢复到运行状态中来,这样就可以操作标记让线程结束。

Thread类中提供了这种方法:interrupt。


守护线程(后台线程):前台线程结束,后台线程自动结束。

join方法:等待调用该方法的线程结束,其他线程才能开始执行。

优先级:所有线程默认优先级为5.(1-10)

yield方法:暂停当前正在执行的线程对象,并执行其他线程。



---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net