java基础5--多线程--要点总结

java基础5

1.前台线程和后台线程。在线程start之前调用setDaemon(true),可以将线程变为后台线程。
前台线程:主线程(main方法中的程序)结束,但线程只要有一个还在运行,那主进程就不会结束。
后台线程:主线程结束,其他线程都会结束。
2.join方法用来联合线程,是将线程合并到调用该语句的线程中。
3.一般情况下,我们通过实现Runnable接口来实现多线程,而不是去继承Thread类。Runnable适合多个相同程序代码的线程去处理统一资源的情况,把线程同程序的代码,数据有效分离,较好的体现了面向对象的设计思想。
4.表记录的复制的中途取消,或者安装文件时中途取消,这都需要多线程来实现。还有服务器的访问,网络聊天程序,都是用多线程。
5.synchronized(锁旗标 biaozhi) {} 这个代码块实现了代码的同步。biaozhi可以是任意的对象。biaozhi为1可以执行,为零则不能执行。线程进入synchronized后biaozhi变为0,直到执行完代码块后解锁,biaozhi变为1.
6.方法前的修饰符synchronized所用的biaozhi是this。
7.死锁的例子:中国人用筷子吃饭,美国人用刀叉,当中国人拿着刀叉而美国人拿着筷子时,双方不相信对方,于是产生死锁。
8.如果想让两个线程类的方法同步,那么需要synchronized方法的biaozhi对象相同。
9.不一定非得有线程wait之时我们才可以调用notify,就好比饭馆服务员喊:有空座位了,而路人不一定非得进去一样。
10.线程的等待和唤醒过程:Thread t-->synchronized(o)-->o.wait()-->o.notify()
首先线程t得到对象o的lock旗标---此时线程t被放在对象o的等待线程池中,t自动释放o的锁旗标---当另外的线程执行了对象o的notify()方法后,线程t可能会被从o的等待线程池中释放出来,并且移动到等待线程对象o的锁旗标的线程池中,当t得到锁旗标时就会执行下去。

你可能感兴趣的:(java基础)