1. 多线程的实现方式
①继承Thread,线程代码写在子类run方法中。
②实现Runnable,线程代码写在接口子类的run方法中。
注意:推荐使用Runnable,因为其避免了单继承的局限性。
2. 实现同步的方式
①同步代码块
synchronized(对象)
{
需要被同步的代码
}
②同步函数,即将关键字synchronized作为修饰符写在函数修饰符位置。
public synchronized void Demo()
{
函数内的代码都将被同步
}
注意:实现同步必须有锁,①中用的所是“对象”,而②中用的锁一般是“this",当该函数被静态修饰后,它用的锁是该方法所在类的字节码文件对象(类名.class)。
3. 同步的前提
①必须要有两个或者两个以上的线程。
②必须是多个线程使用同一个锁。
4. 同步的影响
①好处:解决了多线程的安全问题。
②弊端:多个线程需要判断,较为消耗资源。
5.线程间通讯(等待唤醒机制)
①存在的原因:在“生产者-消费者”案例中,我们需要的情景是生产者生产一个商品,消费者消费一个商品,然后生产者再生产...这样循环操作,不允许生产者连续生产几个这种类似情形的出现。因为线程获取CPU资源是我们不可控的,所以一个线程在获取cpu资源期间很可能已经运行run()方法中的代码好多遍了。因此我们需要“等待唤醒机制”!
②成员:
在JDK1.5之前:wait(),notify(),notifyAll()
在JDK1.5之后:Lock替换了Synchronized,Condition的对象替换了Object里的上述方法。
6.线程的终止
①一般情况:直接改变run()里的while循环标记,让run()方法结束,线程也就结束了。
②特殊情况:线程处于冻结状态。此时需要调用Thread提供的interrupt()方法,强行解除冻结状态,然后操作和①一样。
注意:强行解除冻结状态会抛出InterruptedException异常。
7.将线程设为后台线程。
①特点:当前台线程都结束时,后台线程自动结束。
②方法:调用setDaemon(true)方法。
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------