您的位置:首页 > 职场人生

黑马程序员Java培训、Android培训-Java 学习过程记录_多线程2

2011-03-26 23:18 886 查看
3、后台线程与联合线程如果我们队某个线程对象在启动(调用start方法)之前调用了setDaemon(true)方法,这个线程就变成了后台线程。对于java程序员来说,只要还有一个前台线程在运行,这个进程就不会结束,如果一个进程中只有后台线程运行,这个进程就会结束。pp.join()的作用是把pp所对应的线程合并到调用pp.join();语句的线程中4多线程在实际中的应用单线程情况下,网络聊天程序的收发过程为:先从键盘上读取数据,在将从键盘上读到的数据发送给对方,读取对方回送的数据并加以处理,再循环回读取键盘上的数据,这三个过程必须顺序依次执行。说明:1) 如果一方从键盘上读取了数据并发送给了对方,程序运行到“读取对方回送的数据”并一直等待对方回送数据。如果对方没有回应。程序不能再做任何其他事情,这时程序处于阻塞状态,即使用户想正常终止程序运行都不可能,更不可能实现再给对方发送一条信息,督促对方赶快应答这样的事情了。2) 如果程序没有事先从键盘上读取数据并向外发送,程序将一直在“从键盘上读取数据”处阻塞,即使有数据从网上发送过来,程序无法到达“读取对方发送回来的数据”处,程序将不能接受到别处先主动发送过来的数据。3) 表记录的复制的中途取消4) WWW服务器为每一个来访者都建立专线服务;多线程下:建立线程1,从键盘上读取数据,再将从键盘上读到的数据发送给对方,再循环回读取键盘数据;建立线程2,循环读取收到的数据并加于处理5、使用Runnable接口创建多线程适合多个相同程序代码的线程去处理同一资源的情况,把虚拟CPU(线程)同程序的代码、数据有效分离,较好的体现了面向对象的设计思想。可以避免由于java单继承特性所带来的局限。我们会经常碰到这样的情况,即当我们要将已继承了某一个类的子类放入多线程中,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么,这个类就只能用实现Runnable当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了Runnable接口的类的实例。事实上,几乎所以的多线程应用都可用Runnable接口方式6、多线程的同步6.1什么是线程安全。能同步通信的线程才是安全的。6.2同步代码块独木桥控制,即程序中不能有两个线程都在同一语句中执行;6.3代码块与函数间的同步6.4死锁问题两个或两个以上的线程间运行的必须资源为其他方掌握,相互之间得不到对方的资源共享就会死锁;7、线程间的通信wait:告诉当前线程放弃监视器并进入睡眠状态直到其他线程进入同一监视器并调用notify为主;notify:唤醒同一对象监视器中调用wait的第一个线程。用于类似饭馆有一个空位后通知所有等候就餐的顾客中的第一位入座的情况;notifyAll:唤醒同一对象监视器中调用wait的所有现场,具有最高优先级的线程首先被唤醒并执行。用于类似某个不定期的培训班终于招生满额后,通知所有学员都来上课的情况。
Thread t
Synchronized(o)
o.wait()
o.notify()
线程t得到对象o的lock旗标
此时线程t被放置在对象o的等待线程池中,t知道释放o的锁旗标
当另外的线程执行了对象o的notify()方法后,线程t可能会被从o的等待线程池中释放出来,并且移动到等待线程对象o的锁旗标的线程池中,当t得到锁旗标时就会执行下去
8、线程的等待和唤醒过程


9、线程生命的控制


10、程序中如何控制线程的生命线程类中的方法 suspended阻塞的方法,resume恢复的方法,stop的方法等;但这些方法容易造成死锁,java中已经暂停使用了。一般用循环控制语句和标志判断来实现结束线程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐